学习二叉树(1)

1、二叉树介绍

二叉树是指每个节点最多有两个子树的的树形结构(通俗来说就是一个父节点顶多有两个字节点),它可以有以下几种形状。
这里写图片描述

2、二叉树的特性介绍及简单证明

(1) 二叉树第i层上的结点数目最多为

2i1(i0)

(2) 深度为k的二叉树最多的结点数为有
2k1(k0)

一个满二叉树就是符合这个条件的,第一层的节点为1,第二层的节点数为2,第三层的节点数为4,第四层的节点数为8,由此可以推断:
20+21+22+23+...+2k1=2k1(k0)

(3)根据第二个性质一个节点总数为n的二叉树的高度至少为
log2(n+1)

推理如下:
2k1(k0)=n

二叉树深度至少为
k=log2(n+1)

注:很多资料都会认为深度的值就是高度值,至少有些书籍都是这么写的,还有有些书籍对深度与高度是否是以0开始还是1开始没有统一。这里就不再纠结,只要知道两者概念上明显是不同的,一个是从根节点到叶子节点至上而下数,一个是叶子节点到根节点至下而上数。我们就以1为初始值吧,具体请看下文中的图的中deepth与height

(4)在任意的二叉树中,若末端的节点个数为n0,度为2 的节点数为n2,则

n0=n2+1

我们知道二叉树最大的度为2,也就是二叉树度数不大于,那么总的节点数从度的角度出发,总结点数为n,0度节点的个数为n0,一度节点个数为n1,2度节点的个数为n2(根节点度为2也算是2度节点)。则
n=n0+n1+n2......1

另一方面从节点孩子个数的角度出发,0度节点的孩子为0(n0=0),1度节点的孩子数为n1,2度节点的孩子数为n2*2,其中根节点不是任何节点的孩子(需要加1)。则
n=n1+2n2+1......2

根据公式1与公式2即可得:
n0=n2+1

下面根据具体的图简单验证(深度与高度初始值都是1):
这里写图片描述
根据图得到以下信息,可以加以验证公式是成立的
这里写图片描述

3、特殊的二叉树

(1)满二叉树

概念:每个结点的度都为2的二叉树,称为满二叉树
特点:满足二叉树性质2,符合结点数目最大的情况。
这里写图片描述
(2)完全二叉树
概念:

  • 二叉树中只有最下面两层的节点度可以小于2
  • 其余上面的层结点度必须都为2
  • 且满足最下一层的叶节点集中在左侧的若干位置

特点:

  • 一颗满二叉树肯定是一颗完全二叉树,一颗完全二叉树不一定是满二叉树。
  • 叶子节点只能在最下两层出现且最下面一层的叶子节点都在左侧。

这里写图片描述
若删除点6结点就不再是完全二叉树
这里写图片描述

(3)二叉查找树
概念:二叉查找树又称为二叉搜索树,是一种常用的搜索树,是指将值以某种顺序排列节点最终构成一颗有序的二叉树,一般都是:一个节点的子树中左节点的值都会小于等于其根节点的值,右节点的值都会大于等于其根节点的值
用公式表示就是,若节点A的值为key[A],节点B是节点A的左子树中一个节点,则key[A]≥key[B],若节点C是节点A右子树中的一个节点,则key[A]≤key[C]
特点:

  • 某根节点左子树存在的话,则所有节点都会的值都会小于它的根节点的值
  • 某根节点右子树存在的话,则所有节点都会的值都会大于它的根节点的值
  • 任意的节点的左右子树都为二叉查找树,都满足条件
  • 没有键值相等的节点

这里写图片描述

猜你喜欢

转载自blog.csdn.net/mynewclass/article/details/79570945