首页 > 代码库 > C++实现二叉树的前序、中序、后序非递归扁历

C++实现二叉树的前序、中序、后序非递归扁历

这三种常见的扁历方式,是考研面试等场合经常遇到的,在此做一个总结。

1、前序遍历比较简单:用指针p指向根节点,若p!=NULL且栈非空,则直接访问节点,并将节点的右孩子入栈,同时指针p向左孩子移动。

2、中序扁历:用指针p指向根节点,若p!=NULL且栈非空,则当前节点入栈,同时指针p向左孩子移动,出栈是指针指向当前节点的右孩子。

3、后序扁历相对复杂:需要设置一个辅助栈,标识该节点是否是第二次出栈,只有第二次出栈的节点才可被访问。

具体实现就不啰嗦了,直接上代码吧!

#include <stack>
#include <queue>

using namespace std;

// Binary tree struct
struct BinaryTreeNode
{
	BinaryTreeNode() :m_nValue(0), m_pLeft(NULL), m_pRight(NULL){}

	int m_nValue;
	BinaryTreeNode* m_pLeft;
	BinaryTreeNode* m_pRight;
};

// 按层次创建节点
BinaryTreeNode* CreateBinaryTree()
{
	int a;
	BinaryTreeNode *t = NULL;
	queue<BinaryTreeNode*> queue_nodes;

	cout << "Enter the value of current node value, (space to the leaf node)." << endl;
	if (cin >> a && a != -1)
	{
		t = new BinaryTreeNode;
		t->m_nValue = http://www.mamicode.com/a;>

C++实现二叉树的前序、中序、后序非递归扁历