二叉树的遍历
2016-07-22 00:05
204 查看
二叉树,顾名思义就是一棵根节点最多只有两个子节点(即左孩子与右孩子);今天主要讲的是二叉树的遍历,二叉树的遍历主要按次序遍历分为:前序遍历、中序遍历、后序遍历与层序遍历;如图:
首先,在此先声明一下,这四种二叉树的遍历都是利用了函数的递归方法来进行遍历的;我觉得前三种的遍历方式都是按照判断左右孩子是否存在、根节点打印输出时的位置来进行遍历的;
前序遍历:
遍历顺序是按照:先打印根节点->判断左孩子是否存在->判断右孩子是否存在;
该二叉树的前序遍历的顺序为:ABDECF
中序遍历:
遍历顺序是按照:判断左孩子是否存在->打印根节点->判断右孩子是否存在;
该二叉树的前序遍历的顺序为:DBEACF
后序遍历:
遍历顺序是按照:判断左孩子是否存在->判断右孩子是否存在->打印根节点;
该二叉树的前序遍历的顺序为:DEBFCA
层序遍历:
层序遍历顾名思义就是逐层遍历;
该二叉树的遍历为:ABCDEF
总结:任意二叉树的遍历都是利用函数的递归的方法进行遍历的;且任意的二叉树的遍历都是从根节点出发的,至于根节点的打印输出顺序由遍历的方式所决定的;从代码片中可以看出,二叉树的遍历顺序由根节点的打印输出有关。
二叉树遍历的应用:
问题例如:已知一棵二叉树的前序遍历次序与中序遍历的次序,求后序遍历的次序?
*有关二叉树的遍历的两条性质:
1.已知二叉树的前序遍历与中序遍历,可确认一棵二叉树;
2.已知二叉树的中序遍历与后序遍历,可确认一棵二叉树;*
但是,已知前序遍历与后序遍历,不能确认一棵二叉树!
例如,已知前序遍历为:ABC,后序遍历为:CBA,
可生成如图的二叉树:
END…..
首先,在此先声明一下,这四种二叉树的遍历都是利用了函数的递归方法来进行遍历的;我觉得前三种的遍历方式都是按照判断左右孩子是否存在、根节点打印输出时的位置来进行遍历的;
前序遍历:
遍历顺序是按照:先打印根节点->判断左孩子是否存在->判断右孩子是否存在;
void f(Bitree T) { if(T==NULL) return ; printf("%c",T->data);//打印根节点; f(T->lchirld); //判断左子树是否存在; f(T->rchirld); //判断右子树是否存在; }
该二叉树的前序遍历的顺序为:ABDECF
中序遍历:
遍历顺序是按照:判断左孩子是否存在->打印根节点->判断右孩子是否存在;
void f(Bitree T) { if(T==NULL) return ; f(T->lchirld); //判断左子树是否存在; printf("%c",T->data);//打印根节点; f(T->rchirld); //判断右子树是否存在; }
该二叉树的前序遍历的顺序为:DBEACF
后序遍历:
遍历顺序是按照:判断左孩子是否存在->判断右孩子是否存在->打印根节点;
void f(Bitree T) { if(T==NULL) return ; f(T->lchirld); //判断左子树是否存在; f(T->rchirld); //判断右子树是否存在; printf("%c",T->data);//打印根节点; }
该二叉树的前序遍历的顺序为:DEBFCA
层序遍历:
层序遍历顾名思义就是逐层遍历;
该二叉树的遍历为:ABCDEF
总结:任意二叉树的遍历都是利用函数的递归的方法进行遍历的;且任意的二叉树的遍历都是从根节点出发的,至于根节点的打印输出顺序由遍历的方式所决定的;从代码片中可以看出,二叉树的遍历顺序由根节点的打印输出有关。
二叉树遍历的应用:
问题例如:已知一棵二叉树的前序遍历次序与中序遍历的次序,求后序遍历的次序?
*有关二叉树的遍历的两条性质:
1.已知二叉树的前序遍历与中序遍历,可确认一棵二叉树;
2.已知二叉树的中序遍历与后序遍历,可确认一棵二叉树;*
但是,已知前序遍历与后序遍历,不能确认一棵二叉树!
例如,已知前序遍历为:ABC,后序遍历为:CBA,
可生成如图的二叉树:
END…..
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- 文件遍历排序函数
- C#递归算法之分而治之策略
- Lua 学习笔记之C API 遍历 Table实现代码
- 有关数据库SQL递归查询在不同数据库中的实现方法
- C#中的递归APS和CPS模式详解
- C#遍历文件夹后上传文件夹中所有文件错误案例分析
- C#中遍历Hashtable的4种方法
- WinForm实现按名称递归查找控件的方法
- C#递归方法实现无限级分类显示效果实例
- 使用SqlServer CTE递归查询处理树、图和层次结构
- C#递归算法之打靶算法分析
- C#中的尾递归与Continuation详解
- Erlang中遍历取出某个位置的最大值代码
- C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析
- C++实现图的邻接表存储和广度优先遍历实例分析
- C语言二叉树的非递归遍历实例分析
- 使用C语言构建基本的二叉树数据结构
- 一波二叉树遍历问题的C++解答实例分享
- C#递归实现显示文件夹及所有文件并计算其大小的方法