二叉树的遍历问题总结
来源:互联网 发布:什么软件买火车票便宜 编辑:程序博客网 时间:2024/06/04 20:05
二叉树的遍历:
D:访问根结点,L:遍历根结点的左子树,R:遍历根结点的右子树。
给定一棵二叉树的前序遍历序列和中序遍历序列可以惟一确定一棵二叉树(后序遍历可以举出很多不唯一的反例)。
二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优先遍历的非递归的通用做法是采用队列。
深度优先遍历二叉树。
1. 中序遍历(LDR)的递归算法:
若二叉树为空,则算法结束;否则:
2. 前序遍历(DLR)的递归算法:
若二叉树为空,则算法结束,否则:
3. 后序遍历(LRD)的递归算法:
若二叉树为空,则算法结束,否则:
广度优先遍历二叉树。
广度优先周游二叉树(层序遍历)是用队列来实现的,从二叉树的第一层(根结点)开始,自上至下逐层遍历;在同一层中,按照从左到右的顺序对结点逐一访问。
按照从根结点至叶结点、从左子树至右子树的次序访问二叉树的结点。算法:
非递归深度优先遍历二叉树。
栈是实现递归的最常用的结构,利用一个栈来记下尚待遍历的结点或子树,以备以后访问,可以将递归的深度优先遍历改为非递归的算法。
1.非递归前序遍历:遇到一个结点,就访问该结点,并把此结点推入栈中,然后下降去遍历它的左子树。遍历完它的左子树后,从栈顶托出这个结点,并按照它的右链接指示的地址再去遍历该结点的右子树结构。
2.非递归中序遍历:遇到一个结点,就把它推入栈中,并去遍历它的左子树。遍历完左子树后,从栈顶托出这个结点并访问之,然后按照它的右链接指示的地址再去遍历该结点的右子树。
3.非递归后序遍历:遇到一个结点,把它推入栈中,遍历它的左子树。遍历结束后,还不能马上访问处于栈顶的该结点,而是要再按照它的右链接结构指示的地址去遍历该结点的右子树。遍历遍右子树后才能从栈顶托出该结点并访问之。另外,需要给栈中的每个元素加上一个特征位,以便当从栈顶托出一个结点时区别是从栈顶元素左边回来的(则要继续遍历右子树),还是从右边回来的(该结点的左、右子树均已周游)。特征为Left表示已进入该结点的左子树,将从左边回来;特征为Right表示已进入该结点的右子树,将从右边回来。
4.简洁的非递归前序遍历:遇到一个结点,就访问该结点,并把此结点的非空左结点推入栈中,然后下降去遍历它的左子树。遍历完左子树后,从栈顶托出一个结点,并按照它的右链接指示的地址再去遍历该结点的右子树结构。
----------------------------------------------------------------------
- 二叉树的遍历问题总结
- 二叉树的遍历总结
- 二叉树的遍历问题
- 二叉树的遍历问题
- 二叉树遍历的问题
- 二叉树遍历总结
- 二叉查找树的遍历总结
- 二叉树的非递归遍历总结
- 二叉树的遍历方式总结
- C++二叉树的遍历总结
- 二叉树遍历问题
- 二叉树遍历问题
- 二叉树遍历问题
- 树、二叉树、遍历二叉树的总结
- 关于二叉树遍历的问题
- 二叉树的先序中序后序遍历问题
- 【7004】二叉树的遍历问题
- 【7005】二叉树的遍历问题2
- 选择最佳微控制器的10个步骤
- malloc()和free()里的学问
- c语言swap(a,b)值交换的4种实现方…
- using namespace std 详解
- strlen
- 二叉树的遍历问题总结
- C++ __int64 类型
- 常用字符,整形,浮点型相互…
- 字典树简介
- warning: no newline at the end of file
- Nginx集群
- android之Fragment
- {转载}Linux Top 命令解析 比较详细 {from:http://www.jb51.net/LINUXjishu/34604.html}
- ext 4.1关于一个对象下面有几个对象,前台新建后发生后台的解决办法。