当前位置:网站首页>第三十一章:二叉树的概念与性质
第三十一章:二叉树的概念与性质
2022-08-02 14:10:00 【WANGHAOXIN364】
前置知识:树的概念与性质
为了保证学习效果,请保证已经掌握前置知识之后,再来学习本章节!
每个结点最多只有两个子结点的有根树称为二叉树。常常对两个子结点的顺序加以区分,分别称之为左子结点和右子结点。大多数情况下, 二叉树 一词均指有根二叉树。
二叉树的性质比较丰富,本章节将介绍二叉树的性质。请熟记这些性质。

学习目标
- 熟练掌握二叉树的概念和各种性质
- 能够综合利用二叉树的各种性质解决一些二叉树中的问题
二叉树的概念
定义
简单地理解,满足以下两个条件的树就是二叉树:
- 树中包含的各个节点的度不能超过 2,即只能是 0、1 或者 2;
- 本身是有序树,即左子树和右子树的顺序不能颠倒,即使只有一棵子树,也要区分是左子树还是右子树。

形态
注意:以下各种情况下,一棵树都是一棵二叉树!
- 没有结点的树也是一棵树,称为空树!
- 只有一个根结点也是一棵树;
- 只有左子树的二叉树也是二叉树;
- 只有右子树的二叉树也是二叉树;
- 既有左子树,又有右子树的二叉树是一棵二叉树;

几种特殊的二叉树
1 斜树
顾名思义,斜树一定是斜的,但是往哪边斜还是有讲究的。
① 所有节点都只有左子树的二叉树称为 左斜树。
② 所有节点都只有右子树的二叉树称为 右斜树。
③ 斜树的每一层都只有一个节点,节点的个数和二叉树的深度相同。

2 满二叉树
在一棵二叉树中,如果所有分支节点都存在左子树和右子树(度为 2),并且所有叶子节点都在同一层上,这样
的二叉树称为满二叉树。

3 完全二叉树
对一棵具有 nn 个节点的二叉树按层次序编号,如果编号为 i(1<i≤n)i(1<i≤n) 的节点与同样深度的满二叉树中编号
为 ii 的节点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。
也可以这么去定义完全二叉树:如果二叉树中除了最下层,其他每层都饱满,最下层的结点都集中在该层最左边的若干位置上,则此二叉树被称为完全二叉树。

注意:
(1)满二叉树是完全二叉树,完全二叉树不一定是满二叉树!
(2)在满二叉树的最下层上,从最右边开始连续删去若干结点后得到的二叉树仍然是一棵完全二叉树。
(3)在完全二叉树中,若某个结点没有左孩子,则它一定没有右孩子,即该结点必是叶结点。
二叉树的性质
由于二叉树结构的优美性,因此具有很多很好的性质。
性质1. 若二叉树中,叶子结点数为 n_0n0,度为 2 的结点数为 n_2n2,则 n_0=n_2+1n0=n2+1。
这个性质表明,在二叉树中,叶子结点的个数与度为度为 1 的结点个数无关。
证明如下(选学):
(1)设度为 1 的结点数为 n_1n1,那么显然有 n=n_0+n_1+n_2n=n0+n1+n2。—— ①
(2)设有 ee 条边,那么显然有 e = n-1 = n_1+2n_2e=n−1=n1+2n2。(nn个结点的树有 n-1n−1 条边,每个度为 1 的结点下有 1 条边,度为 2 的结点下有 2 条边,叶子结点下没有边)—— ②
(3)联立上面两个等式,② 式减 ① 式,即可得到 n_0=n_2+1n0=n2+1
性质2. 二叉树第 ii 层上的结点数目最多为 2^{i-1}2i−1。(i≥1i≥1,根节点深度为 11)
- 证明:略。
性质3. 深度为 kk 的二叉树至多有 2^k-12k−1 个结点(k≥1k≥1,根节点深度为 11)。
- 证明:树的第一层有 1 个结点,第二层最多有 2 个结点,第三层最多 4 个结点,......,第 kk 层最多 2^{k-1}2k−1 个结点。所以最多结点数为 S=2^0+2^1+2^2+...+2^{k-1}=2^k-1S=20+21+22+...+2k−1=2k−1。
- 特别的,深度为 kk,且有 2^k-12k−1 个结点的二叉树就是 满二叉树。满二叉树的每一层的结点数都达到了最大结点数。
性质4. 具有 nn 个结点的完全二叉树的深度为 \lfloor \log_2 (n) + 1 \rfloor⌊log2(n)+1⌋。
性质5. 在完全二叉树中,若将结点从上往下,从左到右进行编号,编号 1 \sim n1∼n。那么对编号为 xx 的结点,则其父结点编号为 \lfloor x/2 \rfloor⌊x/2⌋ ,左孩子编号为 2x2x,右孩子编号为 2x+12x+1。左右孩子存在的前提是其对应的编号不超过完全二叉树结点数量 nn。父结点存在的前提是结点 xx 不是根结点。
根结点 | 父结点 | 当前结点 | 左子结点 | 右子结点 | 最后一个结点 | |
---|---|---|---|---|---|---|
存在条件 | —— | x/2 > 0 | —— | 2*x <= n | 2*x + 1 <= n | —— |
编号 | 1 | x/2 | x | 2*x | 2*x + 1 | n |
练习题
- 一棵完全二叉树的节点总数为18,其叶节点数是多少?
- 二叉树第10层的节点数的最大数目是多少?
- 一棵深度为10的满二叉树,其节点数量是多少?
- 一棵n个节点的完全二叉树,则该二叉树的高度h为?
- 如果一棵二叉树有N个度为2的节点,M个度为1的节点,则该树的叶子个数为?
练习题答案
- 根据完全二叉树的定义和构成和性质 1,答案为 9
- 根据性质 2,答案为 2^{10-1}=512210−1=512
- 根据性质 3,答案为 1023
- 根据性质 4,答案为: \lfloor \log_2 (n) + 1 \rfloor⌊log2(n)+1⌋
- 根据性质 1, 答案为 N+1
边栏推荐
猜你喜欢
Win7怎么干净启动?如何只加载基本服务启动Win7系统
Open the door to electricity "Circuit" (3): Talk about different resistance and conductance
cmake配置libtorch报错Failed to compute shorthash for libnvrtc.so
pygame draw arc
Introduction to in-order traversal (non-recursive, recursive) after binary tree traversal
Win10 cannot directly use photo viewer to open the picture
Open the door of power and electricity "Circuit" (2): Power Calculation and Judgment
STM32LL library use - SPI communication
What should I do if Windows 10 cannot connect to the printer?Solutions for not using the printer
网络安全抓包
随机推荐
Use libcurl to upload the image of Opencv Mat to the file server, based on two methods of post request and ftp protocol
Win11 keeps popping up User Account Control how to fix it
Mysql connection error solution
IPV4和IPV6是什么?
win10任务栏不合并图标如何设置
Win10电脑需要安装杀毒软件吗?
推开机电的大门《电路》(三):说说不一样的电阻与电导
二叉树创建之层次法入门详解
Redis的线程模型
MATLAB绘制平面填充图入门详解
倍增和稀疏表
动态数组-vector
编译error D8021 :无效的数值参数“/Wextra” cl command line error d8021 invalid numeric argument ‘/wextra‘
A clean start Windows 7?How to load only the basic service start Windows 7 system
Introduction to in-order traversal (non-recursive, recursive) after binary tree traversal
Mapreduce环境详细搭建和案例实现
求解斐波那契数列的若干方法
MATLAB图形加标注的基本方法入门简介
Codeforces Round #605 (Div. 3)
关于c语言的调试技巧