非递归遍历二叉树
来源:互联网 发布:django网站开发源码 编辑:程序博客网 时间:2024/05/16 16:11
/*
名称:非递归遍历二叉树
说明:以前写过一个非递归遍历二叉树的程序,这次和上次的基本流程差不多。
不过采取的方法有些不一样,上次是利用新的存储结构,添加了一个标志位来判断返回的位置,即是从左子树还是右子树返回的。
这里采用的是一个指针,一直指向上一次访问的结点(初始为空)。在这里,子树返回有四种情况,程序中采取的处理方法分别如下:(1)、是从左子树返回:返回栈顶指针,判断右子树情况。(2)、从右子树返回,而且右子树不为空且不是上一个访问的元素(r中保存):访问右子树。(3)、从右子树返回,右子树为空:访问当前结点(4)、从右子树返回,右子树不为空但是是上一个访问的元素:访问当前结点这里(3)(4)两种情况处理方式一样,在程序中放在一起处理了。还要注意一点的就是,(3)(4)情况中访问p之后,需要把p设为空,否则会重复访问造成死循环。
*/
//非递归后序遍历二叉树void PostOrder4(BiTree T){ stack<BiTNode *> _sta; BiTNode *p = T,*r = NULL; while(p != NULL || !_sta.empty()) { if(p != NULL) { _sta.push(p); p = p->lchild; //转向左子树 } else //右结点 { p = _sta.top(); //获取栈顶元素 if(p->rchild != NULL && p->rchild != r ) p = p->rchild; else { cout<<p->data<<" "; //输出 r = p; //r指向当前结点,准备开始下一轮循环 _sta.pop(); p = NULL; //此处p要设为空,否则下一轮循环会继续遍历p的左子树,而我们需要的是开始遍历栈中的下一个元素 } } }}
阅读全文
0 0
- 非递归遍历二叉树
- 二叉树遍历非递归
- 非递归遍历二叉树
- 二叉树非递归遍历
- 二叉树非递归遍历
- 非递归遍历二叉树
- 二叉树非递归遍历
- 非递归遍历二叉树
- 非递归遍历二叉树
- 非递归遍历二叉树
- 非递归遍历二叉树
- 非递归遍历二叉树
- 二叉树非递归遍历
- 二叉树遍历--非递归
- 二叉树非递归遍历
- 非递归遍历二叉树
- 二叉树非递归遍历
- 二叉树非递归遍历
- 矩阵键盘
- 2、注解@PathVariable用法——映射URL绑定的占位符
- 42. Trapping Rain Water
- Linux下访问Tomcat只能通过localhost,不能通过IP,怎么解决
- UKF MATLAB
- 非递归遍历二叉树
- C语言、C++文件操作汇总
- UVA 11440 Help Tomisu
- 杭电ACM OJ 1011 Starship Troopers 树的动态规划(树的dp)经典树形背包 java写的 包看懂 递归流程完全解析
- Coursea吴恩达《结构化机器学习》课程笔记(2)机器学习策略下
- java注解的详解-适合java初学者
- 面向对象程序设计的特征
- babyos2(8)——读IDE硬盘
- java的函数重载