上节实现了复杂的通用树结构,通用树结构中的每个结点都可以有任意多的孩子,都可以有无限形态,
工程中很少使用这么复杂的树,这节理论介绍另一种树结构模型
目录
1、树到二叉树的转换
通用树结构回顾
-双亲孩子表示法
● 每个结点都有一个指向其双亲的指针
● 每个结点都有若干个指向其孩子的指针
另一种树结构模型
-孩子兄弟表示法
每个结点都有一个指向其第一个孩子的指针
每个结点都有一个指向其第一个右兄弟的指针
孩子兄弟表示法的特点
1. 能够表示任意的树形结构
2. 每个结点包含一个数据成员和两个指针成员
3. 孩子结点指针和兄弟结点指针构成了“树杈”
二叉树的定义
-二叉树是由 n(n ≥ 0) 个结点组成的有限集合,该集合或者为空,或者是由一个
根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。
二叉树的5种形态
特殊的二叉树
-满二叉树(Full Binary Tree)
● 如果二叉树中所有分支结点的度数都为2, 且叶子结点都在同一层次上,则称这类二叉树为满二叉树。
-完全二叉树(Complete Binary Tree)
● 如果一棵具有n个结点的高度为k的二叉树,它的每一个结点都与高度为k的满二叉树中
编号为1 ~ n的结点一一对应, 则称这棵二叉树为完全二叉树。 (从上到下从左到右编号)
完全二叉树的特性
-同样结点数的二叉树,完全二叉树的高度最小
-完全二叉树的叶结点仅出现在最下面两层
● 最底层的叶结点一定出现在左边
● 倒数第二层的叶结点一定出现在右边
● 完全二叉树中度为1的结点只有左孩子
满二叉树是完全二叉树,反过来看完全二叉树是还未形成的满二叉树
小结
-通用树结构采用了双亲结点表示法进行描述
-孩子兄弟表示法有能力描述任意类型的树结构
-孩子兄弟表示法能够将通用树转化为二叉树
-二叉树是最多只有两个孩子的树
2、 二叉树的深层特性
性质1
● 在二叉树的第 i 层最多有 个结点 (i ≥ 1)
☛ 第一层最多有 个结点
☛ 第二层最多有 个结点
☛ 第三层最多有 个结点
☛ ......
性质2
● 高度为 k 的二叉树最多有 个结点 (k ≥ 0)
☛ 如果有一层,最多有 个结点
☛ 如果有两层,最多有 个结点
☛ 如果有三层,最多有 个结点
☛ ......
性质3
● 对任何一棵二叉树,如果其叶结点有 个,度为 2 的非叶结点有 个,则有
证明:假设二叉树中度1的结点有 个且总结点为 n 个,则:
假设二叉树中连接父结点与子结点间的边为 e 条,则:
所以:
性质4
● 具有n个结点的完全二叉树的高度为 (⌊X⌋表示不大于X的最大整数)
证明:假设这n个结点组成的完全二叉树高度为k 、则:
因为n为整数,所以:
取对数:
因为k为整数,所以:
性质5 (完全二叉树特有,普通二叉树不具备)
● 一棵有 n 个结点的完全二叉树(高度为) ,按层次对结点进行编号(从上到下,从左到右),
对任意结点 i 有:
☛ 如果 i = 1, 则结点 i 是二叉树的根
☛ 如果 i > 1 则其双亲结点为 ⌊i / 2⌋
☛ 如果 2i ≤ n , 则结点 i 的左孩子为 2i
☛ 如果 2i > n , 则结点 i 无左孩子
☛ 如果 2i +1 ≤ n , 则结点i的右孩子为 2i + 1
☛ 如果 2i +1 > n , 则结点 i 无右孩子