一、二叉树
二叉树(Binary tree)是每个节点最多只有两个分支(即不存在分支度大于 2 的节点)的树结构。
二叉树又分为满二叉树,完全二叉树,平衡二叉树。
1、满二叉树
一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是 满二叉树。假设二叉树的层数为k
- 满二叉树的结点总和:2k - 1
- 每一层最多的结点个数:2k-1
2、完全二叉树
在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。假设二叉树的层数为k
- 完全二叉树最底层的结点个数范围为:1 ~ 2k-1-1
3、二叉查找树
二叉查找树有数值,且是一个有序树。
- 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
- 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
- 它的左、右子树也分别为二叉排序树
4、平衡二叉树
平衡二叉查找树(AVL树):简称平衡二叉树。性质如下:
- 可以是一棵空树
- 如果不是空树,它的左右两个子树的高度差的绝对值不超过 1,并且左右两个子树都是一棵平衡二叉树。
5、参考文献
- 二叉树理论基础篇,二叉树的种类、存储、遍历、程序定义。
- 树,讲解了二叉树的分类、存储、遍历。
- 什么是平衡二叉树(AVL),讲解了为什么要有二叉平衡树,AVL树插入时的失衡与调整,AVL树的四种插入节点方式,AVL树的四种删除节点方式。
二、堆
堆中的每一个节点值都大于等于(或小于等于)子树中所有节点的值。或者说,任意一个节点的值都大于等于(或小于等于)所有子节点的值。
1、参考文献
- 堆,讲解了堆的定义、用途、分类、存储、操作、排序。
三、注意点
1、平衡二叉搜索树(AVL树)是不是二叉搜索树和平衡二叉树的结合?
是的,是二叉搜索树和平衡二叉树的结合。
2、平衡二叉树与完全二叉树的区别在于底层节点的位置?
是的,完全二叉树底层必须是从左到右连续的,且次底层是满的。
且平衡二叉树有序,存在数值,完全二叉树可以没有数值。
3、堆是完全二叉树和排序的结合,而不是平衡二叉搜索树?
堆近似的可以看作完全二叉树,同时保证父子节点的顺序关系(有序)。
堆的排序是父节点大于子节点,而搜索树是父节点大于左孩子,小于右孩子,所以堆不是平衡二叉搜索树。