【二叉树】关于二叉树的后续遍历遍历以及栈
来源:互联网 发布:淘宝买家退货率高后果 编辑:程序博客网 时间:2024/06/07 00:40
我们知道,二叉树的遍历当中,后序非递归的遍历i是一个非常关键的操作
因为该遍历方式可以进行非常广泛的应用。我们先来介绍二叉树的非递归遍历的思想
由于二叉树的遍历是先遍历是左右根的顺序,于是二叉树在访问子节点的过程当中需要使用到堆栈,以及需要为每一个节点设置一个是否被访问的字段
思想如下:
1)通过一个循环不断地查找作孩子,直到该节点的左孩子为空 。在查找的过程当中,将所有经过的节点入栈。
在执行完以上过程以后,指针会停留在一个没有左孩子的节点当中
2)取出栈顶的元素(即是在第一步骤当中所停止的没有左孩子的节点),
3)如果该节点存在右孩子,并且右孩子未被访问将指针转右,将此孩子入放入栈,再继续转左,回到第一步的大循环当中
4)如果该节点并不存在右孩子,证明该节点是个终端节点,并且该节点是某次遍历中相对的左节点,则该节点应该被访问而且退栈并置null。
那么利用此程序的思想,我们可以实现以下操作
查找某个节点的所有祖先/输出一条到此节点的路径:在查找到某个节点时,栈内的所有节点均是该节点的祖先。将该祖先出栈并且输出路径即可。
#include <iostream>#include <stack>using namespace std;class Node{public: int num; bool visited; Node * lChild; Node * rChild; Node (int a);};Node :: Node(int a){ num=a; visited=false; lChild=NULL; rChild=NULL;}void Traversal(Node * root,stack<Node*> mStack){ Node * p=root; Node * r=NULL; while(p || !mStack.empty()){ if(p!=NULL) { mStack.push(p); p=p->lChild; }else{ p=mStack.top(); if(p->rChild && p->rChild!=r){ p=p->rChild; mStack.push(p); p=p->lChild; }else{ r=mStack.top(); mStack.pop(); cout<<p->num; // p->visited=true; r=p; p=NULL; } } }}int main(){ stack<Node*> myStack;//新建一个堆栈用于存放遍历时经过的结点 Node root(0); Node node1(1),node2(2),node3(3),node4(4),node5(5),node6(6); root.lChild=&node1; root.rChild=&node2; node1.lChild=&node4; node2.lChild=&node3; node3.lChild=&node5;node3.rChild=&node6; Traversal(&root,myStack); return 0;}
0 0
- 【二叉树】关于二叉树的后续遍历遍历以及栈
- 二叉树的后续遍历
- 二叉树后续遍历
- 后续遍历二叉树
- 关于二叉树后续遍历算法的一点思考
- 二叉树后续遍历算法
- 二叉搜索树的后续遍历序列
- 二叉树的后续遍历序列
- 二叉搜索树的后续遍历序列
- 二叉搜索树的后续遍历序列
- 二叉搜索树的后续遍历序列
- 判断二叉树的后续遍历序列
- 二叉搜索树的后续遍历序列
- 搜索二叉树的后续遍历序列
- 二叉搜索树的后续遍历序列
- 二叉搜索树的后续遍历
- 二叉搜索树的后续遍历
- 二叉搜索树的后续遍历序列
- maven之Nexus的配置【pom.xml配置<repositories>】(五)
- C#与Java基础语法初比较
- 字符串压缩
- 深入理解iOS API系列(四)理解CNContactPickerDelegate
- net.sf.hibernate.PropertyNotFoundExceptio
- 【二叉树】关于二叉树的后续遍历遍历以及栈
- C语言/函数指针
- 【LEETCODE】96-Unique Binary Search Trees
- sql cookbook 笔录(一)
- Android中的OptionsMenu,ContextMenu,pupMenu例子
- 求i<j<p<q w[i]×w[p]=w[j]×w[q]总数 STL map SRM 671 div1 500: BearDarts
- POJ 3746 Teacher YYF (打表)
- UIImageView不能设置圆角的解决方法
- Add Binary