算法与数据结构二叉树的顺序存储代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法与数据结构二叉树的顺序存储代码相关的知识,希望对你有一定的参考价值。
1、 用顺序存储二叉树(参考线性表顺序存储结构) 2、 求根节点 3、 指定结点的左孩子、右孩子结点。 4、 求所有叶子节点 5、 输出所有节点
参考技术A 1.应该是按照完全二叉树存的吧。这样的话,2。根节点可以设置为1,(如果设成0的话,以后的所有值-1就可以了)
3,如果一个节点是x它左孩子是2*x,右孩子是2*x+1
4,所有叶子节点是,假设共有K个节点,这样则最后一个有叶子节点的是k/2,所以叶子节点就是[k/2+1,k];
5,顺序输出就可以了。
数据结构与算法————二叉树全面总结
文章目录
😎二叉树
🍉 二叉树定义
n(n ≥ 0)
个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成
二叉树有什么特点?
- 每个结点最多有两棵子树
- 二叉树是有序的,其次序不能任意颠倒,即子树有左右之分,顺序不能颠倒
🍑 二叉树的基本术语
左斜树: 所有结点都只有左子树的二叉树
右斜树: 所有结点都只有右子树的二叉树
斜树: 左斜树和右斜树的统称
斜树有什么特点呢?
- 每一层只有一个结点
- 结点个数与其深度相同
斜树是树结构的特例,是从树结构退化成了线性结构
🍑 满二叉树
所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上的二叉树
满二叉树有什么特点呢?
- 叶子只能出现在最下一层
- 只有度为 0 和度为 2 的结点
- 在同样深度的二叉树中结点个数最多
- 在同样深度的二叉树中叶子结点个数最多
满二叉树是树结构的特例,是最丰满的二叉树
🍑 完全二叉树
在满二叉树中,从最后一个结点开始,连续去掉任意个结点得到的二叉树
完全二叉树有什么特点呢?
- 叶子结点只能出现在最下两层且最下层的叶子结点都集中在二叉树的左面
- 完全二叉树中如果有度为 1 的结点,只可能有一个,且该结点只有左孩子
- 深度为
k
的完全二叉树在k-1
层上一定是满二叉树 - 在同样结点个数的二叉树中,完全二叉树的深度最小
🍉 二叉树的基本性质
性质 1: 在一棵二叉树中,如果叶子结点数为 n 0 n_0 n0,度为 2 的结点数为 n 2 n_2 n2,则有: n 0 n_0 n0= n 2 n_2 n2+1
证明:
设 n 为二叉树的结点总数, n 1 n_1 n1 为二叉树中度为 1 的结点数,则有:n= n 0 n_0 n0+ n 1 n_1 n1+ n 2 n_2 n2 ①
在二叉树中,除了根结点外,其余结点都有唯一的一个分枝进入,一个度为 1 的结点射出一个分枝,一个度为 2 的结点射出两个分枝,所以有:n= n 1 n_1 n1+2 n 2 n_2 n2+1 ②
联立①②可得 n 0 n_0 n0= n 2 n_2 n2+1
性质 2: 二叉树的第 i 层上最多有 2 i − 1 2^i-1 2i−1个结点(i ≥ 1)
证明:
采用归纳法证明。
当 i = 1时,只有一个根结点,而
2
i
−
1
2^i-1
2i−1 =
2
0
2^0
20=1,结论成立
假设i = k 时结论成立,即第 k 层上最多有 2 k − 1 2^k-1 2k−1个结点。
考虑 i = k+1 时的情形。由于第 k+1 层上的结点是第 k 层上结点的孩子,而二叉树中每个结点最多有两个孩子,故在第 k+1 层上的最多大结点个数有2× 2 k − 1 2^k-1 2k−1= 2 k 2^k 2k 个结点,则在 i = k+1时结论也成立。
由此,结论成立。
性质 3: 一棵深度为 k 的二叉树中,最多有 2 k − 1 2^k-1 2k−1个结点
证明:
根据性质2可知,第 i 层上最多有 2 i − 1 2^i-1 2i−1个结点,由此可以算出每一层最多有多少个结点,那么深度为k的二叉树,最多有 2 i − 1 2^i-1 2i−1的前k项和个结点,如下
n = ∑ i = 1 k ( 第 i 层 上 结 点 的 最 大 个 数 ) = ∑ i = 1 k 2 i − 1 n =\\sum_i=1^k(第i层上结点的最大个数)=\\sum_i=1^k2^i-1 n=i=1∑k(第i层上结点的最大个数)=i=1∑k2i−1
2 i − 1 2^i-1 2i−1是等比数列,因此可以通过等比数列的前n项和公式 a 1 ( 1 − q n ) 1 − q \\fraca_1(1-q^n)1-q 1−qa1(1−qn)来求级数 ∑ i = 1 k 2 i − 1 = 2 k − 1 \\sum_i=1^k2^i-1=2^k-1 i=1∑k2i−1=2k−1
显然,具有 2 k − 1 2^k-1 2k−1个结点的二叉树是满二叉树,且满二叉树的深度k= l o g 2 ( n + 1 ) og_2(n+1) og2(n+1),推导过程如下
2 k = n + 1 → 移 位 2^k=n+1\\rightarrow 移位 2k=n+1→移位 k = l o g 2 ( n + 1 ) → 取 对 数 k=log_2(n+1)\\rightarrow取对数 k=log2(n+1)→取对数
性质 4: 具有 n 个结点的完全二叉树的深度为 ⌊ l o g 2 n ⌋ \\left \\lfloor log_2n \\right \\rfloor ⌊log2n⌋ +1
证明:设具有 n 个结点的完全二叉树的深度为 k,则根据性质2可知,最少有 2 k − 1 2^k-1 2k−1结点。根据性质3可知,最多有 2 k − 1 2^k-1 2k−1个结点,为了方便取对数,假设最多的结点不会超过 2 k 2^k 2k,如下
2
k
−
1
≤
n
<
2
k
2^k-1\\leq _n< _2^k
2k−1≤n<2k
k
−
1
≤
l
o
g
2
n
<
k
→
取
对
数
k-1\\leq _log_2n< _k\\rightarrow取对数
k−1≤log2n<k→取对数
l
o
g
2
n
<
k
≤
l
o
g
2
n
+
1
→
移
项
log_2n< _k\\leq _log_2n+1\\rightarrow移项
log2n<k≤