非递归实现二叉查找树的后序遍历
2013-09-20 11:25
127 查看
算法描述:
步骤一:
从当前节点开始,对当前节点以及它的左子树的所有左节点进行入栈处理,但在入栈过程中不做访问,直到当前节点的最左边的叶子节点为止。
步骤二:
当步骤一入栈完毕后,开始出栈,在出栈前先判断栈顶元素是否有右子树,如果没有右子树,直接出栈并访问该节点,并用一个指针记录下当前访问的节点地址信息,直到栈顶元素有右子树为止。
步骤三:
当栈顶元素有右子树,需要判断上一次访问的位置是否是栈顶元素的右节点,如果是,则继续进行出栈处理,并记录下当前访问的节点地址信息,直到栈顶元素有右子树且上一次访问的节点不是栈顶元素的右节点为止。
步骤四:当栈顶元素有右子树且上一次访问的节点不是栈顶元素的右节点,则对栈顶元素的右节点从步骤一开始重新执行,直到栈空。
步骤一:
从当前节点开始,对当前节点以及它的左子树的所有左节点进行入栈处理,但在入栈过程中不做访问,直到当前节点的最左边的叶子节点为止。
步骤二:
当步骤一入栈完毕后,开始出栈,在出栈前先判断栈顶元素是否有右子树,如果没有右子树,直接出栈并访问该节点,并用一个指针记录下当前访问的节点地址信息,直到栈顶元素有右子树为止。
步骤三:
当栈顶元素有右子树,需要判断上一次访问的位置是否是栈顶元素的右节点,如果是,则继续进行出栈处理,并记录下当前访问的节点地址信息,直到栈顶元素有右子树且上一次访问的节点不是栈顶元素的右节点为止。
步骤四:当栈顶元素有右子树且上一次访问的节点不是栈顶元素的右节点,则对栈顶元素的右节点从步骤一开始重新执行,直到栈空。
struct bstree_record; typedef struct bstree_record* bstree; struct bstree_record { int data; bstree m_pleft; bstree m_pright; }; void post_visit(bstree t) { if(t) { bstree prev = NULL; bstree cur = t; stack s = NULL; while(cur) { while(cur) { PushStack(cur,s); cur = cur->m_pleft; } cur = TopStack(s); while(cur && (cur->m_pright == NULL || cur->m_pright == pre) { printf(“the data is %d”,cur->data); prev = cur; PopStack(s); cur = TopStack(s); } ` } } }
相关文章推荐
- 二叉树重难点总结(判断完全二叉树,非递归前、中、后序遍历的实现等...)
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- LeetCode 94. Binary Tree Inorder Traversal 树的前序、中序,后序遍历的非递归实现
- 二叉树的前序、中序、后序、层次遍历的递归与非递归实现
- 二叉树 后序遍历 无tag域非递归实现
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 面试:递归和非递归方式实现先序、中序、后序遍历代码
- 二叉树先序、中序,后序遍历的递归和非递归实现
- java 实现二叉树的构建,先序,中序,后序,层次,递归,非递归的遍历
- 二叉树的前 中 后序遍历,递归和非递归实现以及转换成双向链表
- 二叉树非递归实现先序,中序,后序,按层遍历
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 面试题 二叉树的前序遍历,中序遍历,后序遍历(递归实现)
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树遍历(递归实现,前序,中序,后序遍历)
- ZT 二叉树先序,中序,后序遍历非递归实现
- 算法学习 - 树的三种遍历(递归实现)先序遍历,中序遍历,后序遍历
- 二叉树先序、中序、后序遍历的非递归实现
- 非递归实现二叉树的后序遍历、前序遍历、中序遍历