~二叉树的非递归遍历操作~
2017-04-21 18:23
239 查看
上篇博客中,我们讲了二叉树的结点定义及一些基本操作,现在我们来实现二叉树的非递归遍历操作。
二叉树的遍历有4种操作方法,如前序操作、中序操作、后序操作及层序操作,我们现在着重实现前序操作、中序操作、后序操作的非递归实现。
1.前序操作
2.中序操作
3.后序操作
前序操作、中序操作、后序操作的递归实现及层序操作在我的上一篇博客中已经有代码实现,若有不懂得,可以查看我的上篇博客,链接为http://blog.csdn.net/manongdeyipiant/article/details/70332636
二叉树的遍历有4种操作方法,如前序操作、中序操作、后序操作及层序操作,我们现在着重实现前序操作、中序操作、后序操作的非递归实现。
1.前序操作
void PrevOrderNonR() { stack<Node *> s; Node *cur = _root; while(cur || (!s.empty())) { while(cur) { s.push(cur); cout<<cur->_data<<" "; cur = cur->_left; } Node *top = s.top(); s.pop(); cur = top->_right; } cout<<endl; }
2.中序操作
void InOrderNonR() { stack<Node *> s; Node *cur = _root; while(cur || (!s.empty())) { while(cur) { s.push(cur); cur = cur->_left; } Node *top = s.top(); cout<<top->_data<<" "; s.pop(); cur = top->_right; } cout<<endl; }
3.后序操作
void PastOrderNonR() { stack<Node *> s; Node *cur = _root; Node *prev = NULL; while(cur || (!s.empty())) { while(cur) { s.push(cur); cur = cur->_left; } Node *top = s.top(); if((NULL == top->_right) || (top->_right == prev)) { cout<<top->_data<<" "; prev = top; s.pop(); } else { cur = top->_right; } } cout<<endl; }
前序操作、中序操作、后序操作的递归实现及层序操作在我的上一篇博客中已经有代码实现,若有不懂得,可以查看我的上篇博客,链接为http://blog.csdn.net/manongdeyipiant/article/details/70332636
相关文章推荐
- java语言实现的二叉树的各种操作(包括递归与非递归遍历二叉树,求二叉树的高度,节点总数,叶子节点等)
- 二叉树的常用操作(创建、先中后序递归与非递归遍历、层序遍历)
- 二叉树的基本操作(创建、递归和非递归遍历、求深度、求叶子数)
- 二叉树实现(包括遍历等各种操作,递归与非递归)
- 二叉树操作(插入、删除、遍历(递归与非递归))
- 二叉树的各种操作(递归和非递归遍历,树深度,结点个数等等)(Java)
- 八.二叉树各种操作的C语言实现 二叉树中各种遍历的非递归和递归算法的实现
- 二叉树的常用操作(创建、先中后序递归与非递归遍历、层序遍历)
- 二叉树创建及遍历算法(递归及非递归)(转)
- 二叉树的非递归操作
- 二叉树创建及遍历算法(递归及非递归)(转)
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树的非递归遍历
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)
- 与二叉树有关的一些操作:先序,中序,后序,层次遍历,计算深度,叶结点数