本文讲解二叉树及其C语言的三种遍历实现
二叉树
二叉树是一种树型结构,其特点是每个结点至多有两颗子树,这两颗子树有左右之分,顺序不能颠倒。如图就是一个二叉树的例子:
- 除最后一层外,其他层的结点均有
2
个结点的二叉树称为满二叉树
- 对满二叉树按照从上到小,从左到右的顺序编号,如果有一个二叉树不是满二叉树,该树的编号又与满二叉树的编号对应,则称为
完全二叉树
二叉树的性质
二叉树每个结点至多有两颗子树,因此如果二叉树的每个节点都都包含至多即2
个结点,则
- 第 i i i层上有 2 i − 1 2^{i-1} 2i−1个结点( i ≥ 1 i\ge1 i≥1)
- 深度为k的二叉树有 2 k − 1 2^{k-1} 2k−1个结点
任何一颗二叉树,如果其终端结点
(没有子树的结点)数为
n
e
n_e
ne,度为2
的结点数为
n
2
n_2
n2,则
- n e = n 2 + 1 n_e=n_2+1 ne=n2+1
具有n个结点的完全二叉树的深度为
- ⌊ l o g 2 n + 1 ⌋ \lfloor log_2n +1\rfloor ⌊log2n+1⌋
二叉树的遍历
二叉树的遍历按照访问顺序的不同有6
种方式:
- 根结点->左子树->右子树
- 左子树->根结点->右子树
- 左子树->右子树->根节点
- 根结点->右子树->左子树
- 右子树->根节点->左子树
- 右子树->左子树->根节点
若我们规定访问顺序为先左后右
,则根据访问根节点的顺序不同,有三种遍历方式:
-
先序遍历二叉树:
1)访问根节点
2)先序遍历左子树
3)先序遍历右子树 -
中序遍历二叉树:
1)中序遍历左子树
2)访问根节点
3)中序遍历右子树 -
后序遍历二叉树:
1)后序遍历左子树
2)后序遍历右子树
3)访问根节点
以上图中的表达式为
a
+
b
∗
(
c
−
d
)
−
e
/
f
a+b*(c-d)-e/f
a+b∗(c−d)−e/f,对于图中二叉树的遍历,
先序遍历的结果为:
- + a * b - c d / e f
中序遍历的结果为:
a + b * c - d - e / f
后序遍历的结果为:
a b c d - * + e f / -
二叉树遍历的C语言实现
以上提到的关于二叉树的遍历使用C语言进行了实现,具体代码见Github
代码运行效果如下:
才疏学浅,难免有错误和不当之处,欢迎交流批评指正!
同时有问题的话欢迎留言或邮箱联系(ljt_IT@163.com)。