数据结构与算法(6.1)二叉树的基本介绍

在今天的学习中,将会介绍二叉树的基本概念,以及一些零碎的知识点


在这里插入图片描述

树的基本介绍

二叉树是一种非线性的结构,是由有限个节点组成的有层次的集合,因为形状像一颗倒挂的树,所以我们叫他二叉树:
在这里插入图片描述

观察这颗树的结构,我们发现,除最上层节点以外,其他的节点的上面都连了一个节点,那我们说这个节点是有先驱节点,也叫父节点的,没有先驱节点的那个节点就叫根节点,对应图中的1号节点,继续观察,有一些节点的下面有节点,有一些没有节点,这个节点叫当前节点的后继节点,也叫孩子节点,没有后继节点的就叫叶子节点,对应图中的4,5,7号节点。注意,在图中我们可以看出,除根节点以外每一个节点都只有一个先驱节点,有0个或者多个后继节点,回想递归的定义,大事化小,小事化了,和二叉树是对应的,因此,二叉树是递归定义的。

子树的定义:

对于上图而言,1234567号节点构成了一个二叉树,从根节点开始,向左右延申,2号节点及其后继节点,就叫做1号节点的左子树,3号节点及其后继节点就叫做1号节点的右子树
在这里插入图片描述
注意,这里的子树是不能相交的,相交的就不叫二叉树了,左右都是分开的。

节点的度:

一个节点后继节点的数量叫做节点的度,上图每个二叉树的度如下:
在这里插入图片描述
注意,对于树来说也有度,树的度就是节点中度的最大值,在这里就是2

节点的层次:

从根节点开始,根节点处于第一层,接下来就是第二层,第三层…
在这里插入图片描述

描述树结构的方法

这里我们只说一种最常用也是最优的表示方法:左孩子右兄弟表示法。
即为一个节点储存三个信息,一个是自身的数值,一个是左孩子的地址,一个是该节点右边兄弟节点的地址,在这里补充说明一下兄弟节点的定义:
具有相同父节点的节点互为兄弟节点
就像上图中 2,3互为兄弟节点,5,6互为兄弟节点。
代码表示如下

typedef int DataType;
typedef struct TreeNode
{
	struct TreeNode* firstchild;
	struct TreeNode* rightbrother;
	DataType data;
}TreeNode;

为什么要这么表述呢,演示一下大家就能明白,在上面的树上稍加改动:
在这里插入图片描述

现在是一个树,而非二叉树,我们用左孩子右兄弟表示法表示一下:
在这里插入图片描述
也就是当这种方法构建出来以后,我们通过1节点就能找到任意一种节点,并且任何特殊情形都适用,把一个复杂的逻辑结构通过一个个结构体表示了出来。

二叉树

二叉树则是树的另一个分支,而且应用较广,那么什么是二叉树呢?就是孩子节点只能由0个,1个或者2个,符合这种条件的就是二叉树,像上图中3的孩子节点由5,5.5,6三个节点构成,这就不叫二叉树。

在这里插入图片描述
像这种树形结构,就是二叉树的一种。

满二叉树

满二叉树就是除叶子节点之外,每一个节点都有两个后继,这样的树就叫做满二叉树
在这里插入图片描述
这就是一个标准的满二叉树,满二叉树中有一些规律,例如第一层有 20个节点,第二层有 21个节点,第三层有 22个节点,如果用n表示二叉树的层数,那么每一层就有 2n-1个节点,其次整个树的节点个数为 2k-1个节点,k为最大的层数。

完全二叉树

满二叉树是完全二叉树的一种情况,那么完全二叉树又是什么?

完全二叉树的孩子节点可以有0,1,2个,并不非要是2个,但是注意,如果节点的度为1,那一定是有左孩子没有右孩子:
在这里插入图片描述
就像这样,3节点的度为1,但是他只有左孩子,没有右孩子,如果是只有右孩子没有左孩子,那就不叫一个完全二叉树。

二叉树的性质

1.如果规定根节点的层数为1,则一棵非空二叉树的第i层最多有2i-1个节点(也就是满二叉树的情况)
2.如果规定根节点的层数为1,则一棵非空二叉树的节点数量最多是2k-1个(也是满二叉树)
3.对于任何一颗二叉树,如果度为0的节点个数为n0个,度为2的节点个数为n2个,那么n0 = n2 + 1 这个解释一下,我们可以想象一下 最开始二叉树只有一个根节点,
在这里插入图片描述
现在度为0的节点有一个,现在我们加上一个左孩子
在这里插入图片描述
可以发现,度为0的节点减少了一个,但是又增加了一个,所以如果加一个节点对于度为零的总数没有影响,那如果加两个节点呢?
在这里插入图片描述
这时可以看到,度为零的节点有两个,度为2的节点为1个,再给他们加节点也是一样的规律,也就是度为0的节点永远比度为2的节点多一个(其实就是因为开始有个根节点,所以度为0开始就有一个,后来度为0和度为1一起增加,但是基础别人就比你多一个)。
4.如果规定根节点的层数为1,则一棵有n个节点的满二叉树的深度等于在这里插入图片描述

这个可以用公式算出来,满二叉树每一层个数构成等比数列 如果树的深度为h,那么一共有 2h-1个节点,现在节点总数为n,也就是n =
2h-1个,h也就能算出来了.
5.对于具有n个节点的完全二叉树,如果按照从上到下从左到右的顺序对所有节点从0开始编号,那么对于序号为i的节点有
1)i > 0 , i 的双节点为 (i-1)/2;
2)2i+1<n 左孩子为 2i+1
3)2i+2<n 右孩子为 2i+2
就是规律,可以画个图看一下:
在这里插入图片描述

小结

零碎的知识点很多,但是还是有必要了解,在了解这些基本概念以后,在下一篇博客中将会教大家如何把堆实现出来。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值