数据结构:二叉树基础

一.二叉树的概念及结构

不熟悉树这个结构的可以看看数据结构:树这篇文章。

1.1概念

一棵二叉树是结点的一个有限集合,该集合:

  1. 为空
  2. 由一个根节点加上两棵别称为左子树和右子树的二叉树组成。

像这样:在这里插入图片描述
每个节点都有2个或1个或者0个子节点,这就是二叉树。而且

  1. 二叉树不存在度大于2的结点
  2. 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树

任意二叉树都是由以下几种情况构成的:
在这里插入图片描述

1.2特殊的二叉树

  1. 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是 ,则它就是满二叉树。像这样
    在这里插入图片描述

像这样除了最后一行,每一行的节点都有两个节点。

  1. 完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。像这样
    在这里插入图片描述

简单来讲完全二叉树就是最后一行的节点最少为1个,最多为2 ^ (n-1)个节点(n为此时的高度)并且从左到右要连续.而节点为2 ^ (n-1)时此时的完全二叉树就是满二叉树。前N-1层是满的,最后一层可以不满,但是从左到右一定要连续

二.二叉树的性质

我们观察一下完全二叉树:
在这里插入图片描述

  1. 来看这棵树的每一层都有多少个节点,通过计算不难算出,如果此时高度是i的话则一棵非空二叉树的第i层上最多有2 ^ (i-1)个结点
  2. 那深度为n的二叉树的最大结点数是多少呢?也就是深度为n的满二叉树的节点有多少。我们可以列一个式子:
    在这里插入图片描述

学过高中数学的应该能一眼看出来这是一个等比数列的前n项和结果就是:2^n - 1;但是这是完全二叉树也就是满二叉树最大的节点数,那最小的节点数是多少呢?这也不难算,最少节点个数就相当于最后一行只有1个节点,结果可以认为前(n-1)个节点的个数+1:
在这里插入图片描述

结果就是2 ^ (n-1) -1 + 1,也就是2 ^ (n-1).

  1. 再来计算一下如果这个数有i个节点,它的深度n是多少?既然刚才计算了总结点数 i = 2 ^ n - 1。那倒过来退n应该等于log(i + 1)这里是以2为底,但是我打出来那个2,所以就这样表示了。
    在这里插入图片描述

  2. 最后还有一个比较重要的性质:对任何一棵二叉树, 如果度为0其叶结点个数为n0, 度为2的分支结点个数为n2,则有n0= n2+1.就是没有孩子的节点永远比有两个孩子节点的个数多一个。

当然这个二级结论可以推到出来的:
在这里插入图片描述

刚开始这里只有一个节点,他没有孩子所以没有孩子的节点为1个n0 = 1,有两个孩子节点的没有n2 = 0.

在这里插入图片描述

现在多加一个节点没有孩子的节点是1这个节点仍然只有1个n0 = 1,而有两个孩子的节点还是没有n2 = 0;

在这里插入图片描述

再添加一个节点发现终于有一个节点有两个孩子了,n2 = 1,但是呢此时没有孩子的节点是1,2这两个节点变成了2个,n0 = 2.仍然比n2多一个,后来的步骤都差不多,所以说n0用于比n2多1.

三.小练习

看几道简单的练习:

3.1

在这里插入图片描述

这里就要用到刚才推导出来的结论:
n0 = n2 + 1;
而叶子节点数就是度为0的节点,所以这题答案是199+1

3.2

在这里插入图片描述

因为二叉树中节点的度只有三种0,1,2也就是说
n0 + n1 + n2 = 2n,而现在我们求的是n0的个数:
n0 + n1 + n2 = 2n;
n0 + n0 - 1 + n1 = 2n;
2*n0 = 2n + 1 - n1;

而现在我们唯一不知道的就是n1的值,但是注意只有一个度的节点只有两种情况:
要么为1:
在这里插入图片描述

要么为0:
在这里插入图片描述

我们再看刚才得出的式子:
2*n0 = 2n + 1 - n1此时n1不可能为0,一旦为0了,那n0的个数就变成了n + 1/2,这显然是不合理的,所以只有一个度的节点个数只能是0,叶子节点个数自然而然就等于n了。

3.3

在这里插入图片描述

节点个数和数的高度的关系,之前也算出来了:
最大节点个数 = 2 ^ 高度 - 1.
最小节点个数 = 2 ^ (高度).
通过估算2的9次方是512,碰巧531是在2的9次方和10次方之间。所以这个树的高度是10.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值