GitHub同步更新(已分类):Data_Structure_And_Algorithm-Review
公众号:URLeisure 的复习仓库
公众号二维码见文末
以下是本篇文章正文内容,下面案例可供参考。
二叉树的概述
- 二叉树(binary tree)是 n(n ≥ 0)个节点构成的集合,它或为空树(n = 0),或满足以下两个条件:
- 有且仅有一个称为根的节点。
- 除根结点以外,其余节点分别为两个互不相交的子集 T1 和 T2 ,分别称为T的左子树和右子树,且 T1 和 T2 本身都是二叉树。
- 二叉树是一种特殊的树,它最多有两个子树,分别为左子树和右子树,二者是有序的,不可交换的。
- 也就是说,二叉树不存在度大于2的节点。
二叉树的 5 种状态:
- 二叉树的结构最简单,规律性最强,因此通常被作为重点。
满二叉树
-
一棵深度为 k 且有 2 k 2^k 2k - 1(性质二)个节点的二叉树。
-
满二叉树每一层都“充满”了节点,达到最大节点数。
完全二叉树
-
除了最后一层外,每一层都是满的(最大节点数,性质一),最后一层节点是从左向右出现的。
-
如图,完全二叉树除了最后一层,前面每一层都必须是满的,最后一层必须从左向右排列。
-
如果 2 没有左孩子,就不可以有右孩子(没有 4,就不允许有 5 和 6)。
-
如果 2 没有右孩子,3 就不能有左孩子(没有 5,就不允许有 6)。
二叉树的性质
性质一
在二叉树的第 i 层上至多有 2 i − 1 2^{i-1} 2i−1个节点。
性质二
深度为 k 的二叉树至多有 2 k 2^k 2k - 1 个节点。
Σ i = 1 k 2 i − 1 = 2 0 + 2 1 + . . . + 2 k − 1 = 2 k − 1 \Sigma_{i=1}^k 2^{i-1} = 2^0 + 2^1 + ... + 2^{k-1} = 2^k -1 Σi=1k2i−1=20+21+...+2k−1=2k−1
性质三
对于任何一棵二叉树,若叶子树为 n0,度为 2 的节点数为 n2,则 n0 = n2 + 1。
证明:
- 二叉树中的节点度数不超过 2,因此一共有 3 种节点。度分别为 0、1、2。设二叉树总结点数为 n,其余分别为 n0,n1,n2。则 n = n0 + n1 + n2。
- 设总分支数为 b。已知 n = b + 1。
- 度为 0 的节点有 0 个分支,度为1的节点有 1 个分支,度为 2 的节点有 2 个分支。b = n1 + 2n2。
- 2.3 联立,得 n = n1 + 2n2 +1。代入 n = n0 + n1 + n2化简得 n0 = n2 + 1。
性质四
具有n个节点的完全二叉树的深度必为 [log2n] + 1,也就是 floor(log2n)+1。
(参考性质二)
性质五
对于完全二叉树,若从上至下、从左至右编号,则编号为 i 的节点,其左孩子编号必为 2i,其右孩子编号必为 2i + 1,其双亲的编号必为 i/2。
例题
1.一棵完全二叉树有 1001 个节点,其中叶子节点的个数是多少?
由完全二叉树的定义可知,1001 的双亲节点是最后一个拥有子叶的节点,其后面到 1001 全是叶子。
1001
−
[
1001
÷
2
]
=
501
1001 - [1001 ÷ 2 ] = 501
1001−[1001÷2]=501
2.一棵完全二叉树第 6 层有 8 个叶子,则该完全二叉树最少有多少个节点,最多有多少个节点?
1). 完全二叉树的叶子分布在最后一层,该树有 6 层。即第 6 层有 8 个叶子,而前 5 层都是满的。2 5 − 1 + 8 = 39 2^5 - 1 + 8 = 39 25−1+8=39
2). 完全二叉树的叶子分布在倒数第二次和最后一层,该树有7层,前六层是满的。即第 6 层的最后 8 个节点无子节点,第 7 层都是叶子。2 7 − 1 − 2 × 8 = 111 2^7 - 1 - 2 × 8 = 111 27−1−2×8=111
关注公众号,感受不同的阅读体验
下期预告:二叉树的存储结构