【数据结构入门】二叉树(1)

发布于:2025-08-12 ⋅ 阅读:(16) ⋅ 点赞:(0)

目录

1.二叉树的概念

2.特殊的二叉树

2.1 满二叉树

2.2 完全二叉树

3. 二叉树的三个公式

3.1 求K层满二叉树有多少节点

3.2 求第K层非空二叉树中最多有多少节点

3.3 度为0和度为2的结点之间的关系

4.二叉树题目

4.1 题目一

4.2 题目二

4.3 题目三

4.4 题目四

5. 推导结论

满二叉树公式:

完全二叉树公式:

满二叉树的高度:

完全二叉树的高度:

6.二叉树的数据存储


        本期内容是在《》的基础上进行的拓展,没有学习的读者,可以点击前面的跳转链接进行学习。

        上一期内容讲了树,树其实本质上就是根 + 它的子树,在一棵树中的任意一个节点都满足此规律,所以树是一个递归结构

1.二叉树的概念

        就是度为2的树。每个结点最多有两个孩子,第一个孩子叫做左孩子,第二个孩子叫做右孩子。下图就是生活中真实的“二叉树”。

2.特殊的二叉树

2.1 满二叉树

        一个二叉树,每一层的结点达到最大值,这个二叉树就是满二叉树,如果说这个二叉树的层数是K,那么这个结点的总数是:

2^{K} - 1

2.2 完全二叉树

        完全二叉树是一个效率很高的数据结构,完全二叉树是由满二叉树引出来的,对于深度为K的,有N个节点的二叉树,当前晋档每一个节点都与深度为K的满二叉树中编号从1到N的结点一一对应时,称之为完全二叉树,满二叉树是一种特殊的完全二叉树。

        说人话就是前K-1层必须是满二叉树,最后一层可以不满,但是最后一层的结点必须是从左到右连续存放的

下面这张图就是讲过的概念的包含顺序,其中树的概念最大。

3. 二叉树的三个公式

根结点所在的层数是1;

3.1 求K层满二叉树有多少节点

2^{K} - 1

3.2 求第K层非空二叉树中最多有多少节点

2^{K-1}

3.3 度为0和度为2的结点之间的关系

        度为0其实就是叶子结点,度为2就是既有左孩子还有右孩子的节点。

n0 = n2+1

4.二叉树题目

4.1 题目一

叶子结点的数目 = 度为2的结点数目 + 1 = 199 + 1 = 200

选B

4.2 题目二

设叶子节点个数为N0,度为2的节点的个数是N2,度为1的节点的个数是N1,有N0 = N2 + 1、

N1 + N2 + N0 = 2n;带入得2N0 - 1 + N1 = 2n,化简2N0 + N1 = 2n + 1,因为是2n个节点(偶数个),说明一定是下面这种情况:一定会存在一个节点的度是1,又因为这是完全二叉树,也就是说有且仅有一个节点度为1,N1是1,那么N0就是n,选A。

4.3 题目三

        2的9次方-1 = 511,说明9层满二叉树的节点个数是511,而531比9层满二叉树节点个数还要多,说明至少是10层,2的10次方-1 = 1023远大于531,说明这是一个10层不满的完全二叉树。

选B

4.4 题目四

        从上一题推断这是一个不满10层的二叉树,767 - 满9层二叉树511 = 256,也就是说最后一层有256个节点,占用了第9层的128个节点,第九层有2的8次方个即256个数据,被占用了128个数据,还剩128个数据没有孩子,再加上第10层原本的256个没有孩子的节点,那么就有384个叶子结点。

选B

5. 推导结论

N个节点高度是h;

满二叉树公式

N = 2^{h}-1

完全二叉树公式

        N = 2^{h}-1 -X

        这里的x是最后一层可能存在的节点个数,如果X=0,那么就是满二叉树,如果是最后一层所有的节点之和,那么就会退化到上一层,所以X必须是最后一层所有结点之和-1,保证最后一层至少有一个节点

所以X的取值范围是:

X\in \left \{ 0,2^{h-1}-1\right \}

完全二叉树节点的范围

 2^{h-1}~2^{h}-1 

满二叉树的高度:

        \log_2 (N + 1)

完全二叉树的高度:

高度最小值

                将x=0带入:

                           h=\log_2 (N +1)                                 

高度最大值

                 将x=  2^{h-1}-1带入:

N = 2^{h}-1 -(2^{h-1}-1)

即:

N = 2^{h-1}(2 - 1)

N = 2^{h-1}

最后:

h = \log_2 (N)+1

完全二叉树高度的范围

h=\log_2 (N +1) ~h = \log_2 (N)+1

6.二叉树的数据存储

对于完全、满二叉树而言适合用数组来存储,将每一层的数据按顺序存储到数组中。

已知当前节点的下标为i,就可以求出左孩子的下标为

2*i+1

求出右孩子的下标为:

2*i+2

已知孩子的下标为i,那么父结点的下标为

(i-1)/2

对于非完全二叉树,使用数组存储,会有空间的浪费

可以使用链式存储