数据结构与算法(七)二叉树的特点和性质

本文详细介绍了二叉树的特点,包括它每个节点最多有两个子树,分为左子树和右子树。同时,文章讨论了特殊类型的二叉树,如斜树、满二叉树和完全二叉树的定义与特性。此外,还阐述了二叉树的五个关键性质,如各层节点数量、完全二叉树与满二叉树的区别以及结点关系等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉树,顾名思义就是每个结点有两个分支(分叉、子树),所以叫二叉树。

二叉树是树形结构里面最重要的一种结构,平衡查找树、红黑树、哈夫曼树等都是二叉树的子类结构。

1、二叉树的特点

  • 二叉树的每个结点最多有两个分支、有两棵子树,没有子树或有一个子树也是可以的,所以二叉树中不存在度大于2的结点。
  • 二叉树是有序树,左子树和右子树是有顺序的,次序不能任意颠倒。就像人是双手、双脚,但显然左手、左脚和右手、右脚是不一样的。
  • 因为二叉树是有序树,所以即使树中某结点只有一个子树,也要区分它是左子树还是右子树。

二叉树具有五种基本形态:

  1. 空二叉树
  2. 只有一个根节点
  3. 根节点只有左子树
  4. 根结点只有右子树
  5. 根结点既有左子树又有右子树

2、特殊的二叉树

2.1、斜树

所有的结点都只有左子树的二叉树叫左斜树如上图树2。所有结点都是只有右子树的二叉树叫右斜树如上图树5。这两者统称为斜树。

斜树有一个很明显的特点,就是每一层都只有一个结点,结点个数与二叉树的深度相同。

2.2、满二叉树

满二叉树又称为完美二叉树:在一棵二叉树中,如果所有分支结点(非叶子结点)都拥有左子树和右子树,并且所有叶子结点都
同一层上,这样的二叉树就是一颗完美二叉树。从样子上看就感觉很完美。

单是每个结点都存在左、右子树,不能算是完美二叉树,还必须要所有的叶子都在同一层上,这就做到了整棵树的平衡。

因此,完美二叉树的特点:

  1. 叶子结点只能出现在最下一层。出现在其他层就不可能达成平衡。
  2. 非叶子结点的度一定是2。否则就是"缺胳膊少腿" 了。
  3. 在同样深度的二叉树中,完美二叉树的结点个数最多,叶子数最多

2.3、完全二叉树

这是一种有些难以理解的特殊二叉树。

对一棵具有n个结点的二叉树按层序编号,如果编号为 i(1≤i≤n) 的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。

个人解释:在最底层,所有叶子结点都是左对齐的,而忽视最底层,其他层是满二叉树。

首先从字面上要区分,“完全”和“满”的差异,满二叉树一定是一棵完全二叉树,但完全二叉树不一定是满二叉树。

完全二叉树的特点:

  1. 叶子结点只能出现在最下面两层。
  2. 最下层的叶子一定集中在左部连续位置。
  3. 倒数第二层,若有叶子结点,一定都在右部连续位置。
  4. 如果结点度为1,则该结点只有左孩子,即不存在只有右子树的情况。
  5. 同样结点数的二叉树,完全二叉树的深度最小。 

3、二叉树的性质

性质1:在二叉树的第i层上至多有2^(i-1)个结点 (i≥1)。

第一层是根结点,只有一个 ,所以2^(1-1)=2^0=1。

第二层有两个,2^(2-1)=2^1=2。

第三层有四个,2^(3-1)=2^2=4。

第四层有八个,2^(4-1)=2^3=8。

性质 2: 深度为k的完全二叉树至少有2^(k-1)个结点 (k≥1)。

这里是2的(k-1)次方,不是2的k次方再减1。

因为是最少,所以在第k层只能有一个结点。

如果有一层,至多有1=2^(1-1)个结点。

如果有而层,至多有1+1=2=2^(2-1)个结点

如果有三层,至多有1+2+1=4=2^(3-1)个结点。

如果有四层,至多有1+2+4+1=8=2^(4-1)个结点。

性质 3: 深度为k的二叉树至多有2^k-1个结点 (k≥1)。

这里是2的k次方再减1,不是2的(k-1)次方。

因为是最多,所以在第k层铺满结点。

如果有一层,至多有1=2^1-1 个结点。

如果有而层,至多有1+2=3=2^2-1个结点

如果有三层,至多有1+2+4=7=2^3-1个结点。

如果有四层,至多有1+2+4+8=15=2^4-1个结点。

性质 4: 对任何二叉树,如果其数度为0的结点数(叶子结点)为n0,度为1的结点数为n1,度为2的结点数为n2,那么n0=n2+1。

依据上图进行推导,数出结点总数为10,其中n0=5,n1=1,n2=4,所以结点总数=n0+n1+n2

数出来连线数为9,其中度为1的结点会连出来一条线,度为2的结点会连出来两条线,所以连线数=n1*1+n2*2

因为根节点是只有连出去的线,没有连进来的线,所以连线数要比结点总数少一,得到结点总数-1=n0+n1+n2-1=n1*1+n2*2=连线数。化简得到n0=n2+1或n0-1=n2.

性质 5:具有n个结点的完全二叉树的深度k为㏒₂n+1的整数值,而满二叉树的深度k=㏒₂(n+1)。

结合性质 2和性质 3,可以知道深度为k的二叉树拥有的结点数n的取值范围为[2^(k-1),2^k-1]。

此时我们知道n反推k,已知2^(k-1)≤n≤2^k-1,其中n≤2^k-1我们不能要,可以转为n<2^k,得到2^(k-1)≤n<2^k,将不等式的两边取对数,得到k-1≤㏒₂n<k,其中㏒₂n<k可以不要,得出结论:k≤㏒₂n+1,因为k为整数,所以k对㏒₂n+1的结果取最大整数即可。

例如上图的完全二叉树的结点数为10,㏒₂10+1≈4。 上图的满二叉树的结点数为15,k=㏒₂(15+1)=4。

性质 6:如果对一棵有n个结点的完全二叉树(其深度为k)的结点按层序编号(从第1层到第k层,每层从左到右) ,对任一结点i(1≤i≤n)有:

  1. 如果 i=1 ,则该结点是二叉树的根,无双亲;如果i>1,则则结点i的双亲是结点[i/2]。
  2. 如果 2i>n,则结点i无左孩子(该结点为叶子结点);否则其左孩子是结点[2i]。
  3. 如果 2i+1>n ,则结点i无右孩子;否则其右孩子是结点[2i+1]。

这个性质也非常好理解,根据结点编号,不管双亲还是孩子都是2倍的关系,只要不超过结点数n那么就存在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值