一、二叉树的概念
1.1二叉树的定义
二叉树另一种树形结构,他的特点是每个节点只有两颗子树
(即不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒。
1.2二叉树与度为2的有序树的区别
- 度为2的树至少有3个结点,而二叉树可以为空
- 度为2的有序树的孩子的左右次序是相对另一个孩子而言的
若某个结点只有一个孩子
,则这个孩子就无须区分左右次序
而二叉树无论其孩子数是否为2
,都是需要确定其左右次序
,即二叉树的左右次序不是相对另一结点而言,而是确定的
1.3特殊的二叉树
1.3.1满二叉树
定义:一个高度为h
,且含有2的h次方-1
个结点
的二叉树,称为满二叉树
性质:
- 树的每一层都含有最多的结点
- 满二叉树的叶子结点都集中在二叉树的最下一层
- 除叶子结点之外的每个节点度数均为2
1.3.2完全二叉树
定义:高度为h,有n个节点的二叉树,当且仅当
其每个节点都与高度为h的满二叉树中的编号为1~n的结点一一对应
的时候
,成为完全二叉树(在满二叉树的基础上去掉若干个编号更大的结点)
1.3.3二叉排序树
左子树上所有结点的关键字均小于根结点的关键字,右子树上的所有节点的关键字均大于根结点的关键字,左子树和右子树又各是一颗二叉排序树
1.3.4平衡排序树
树上任一结点的左子树和右子树的深度之差不超过1
二、二叉树的性质
性质1:前提:非空二叉树,叶子节点数等于度为2的结点数+1
性质2:前提:非空二叉树,第k层上至多又2的k次方-1个节点![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4b9fc20064cd02f8bd8aa82676d91f42.png)
性质3:高度为h的二叉树至多又2的h次方-1个节点(最多节点的情况刚好是一颗满二叉树)
性质4:具有n个(n>0)的结点的完全二叉树的高度
性质五:对于完全二叉树,可以由结点数n推出度为0、1、2的结点数
完全二叉树度为1的结点只能是0或1
完全二叉树度为0➕度为2一定是奇数
(因为度为0=度为2加1)
(所以度为0+度为2 等于 2倍的度为2+1)
三、二叉树的存储结构
3.1顺序存储
顺序存储:适合完全二叉树和满二叉树,树中结点序号可以唯一反应结点之间的逻辑关系,这样既能最大可能地节省存储空间,又能利用数组元素的下标值确定结点在二叉树中的位置,以及结点之间的关系
最坏情况:一个高度为h且只有h个结点的单支树需要占据近2的h次方-1个存储单元
3.2链式存储
由于顺序存储的空间利用率较低,因此二叉树一般采用链式存储结构,用链表结点来存储二叉树中的每个结点。
在二叉树中,结点结构通常包括若干数据域和若干指针域
(二叉链表至少包括3个域:左指针域、左指针域、数据域)
在含有n个结点的二叉链表
中,含有n+1
个空链域
解释
:一个二叉树有n个结点,总共有2n个指针域,
除根结点以外,其它每一个结点头上都会有连有指针,所以有n-1个结点
因此2n个指针域中会有n+1个指针是指向null的