首页 > 代码库 > 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++实现二叉树的前序、中序、后序非递归扁历
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。