平衡二叉树、完全二叉树、满二叉树、二叉搜索(查找 / 排序)树、平衡二叉搜索树、二叉堆

 

如有纠结,请参考这个知乎回答,国内不少教科书定义不同。

为什么说“满二叉树也是完全二叉树”? - 搞事情的回答 - 知乎

https://www.zhihu.com/question/19809666/answer/154000457

 

查了一些博客、百科整理出以下关于树的定义以及易混点:

平衡二叉树:一棵空树或左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是平衡二叉树。(注意:实际应用中很少有不是二叉搜索树的平衡二叉树,所以很多语境下平衡二叉树即指平衡二叉搜索树,但本文中不使用这样的简称)

完全二叉树:设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层从右向左连续缺若干结点。(完全二叉树是特殊的平衡二叉树)

满二叉树:深度为k,且有2的(k)次方-1个节点——每一层上的结点数都是最大结点数。(此为国内定义)(满二叉树是特殊的完全二叉树)

二叉搜索(查找 / 排序)树BST:左子树上的值都小于根结点的值,右子树上的值都大于根结点的值,且左右子树都是二叉排序树。

平衡二叉搜索树AVL:一棵空树或它的左右两个子树的高度差的绝对值不超过1,左子树上的值都小于根结点的值,右子树上的值都大于根结点的值,且左右两个子树都是一棵平衡二叉树。常用算法有红黑树、AVL、Treap、伸展树等。(注意:AVL可以表示算法也可以表述树,二者不是一件事)

堆:通常是一个可以被看做一棵树的数组对象,堆中某个节点的值总是不大于或不小于其父节点的值,堆总是一棵完全树。
堆分为两种:最大堆——父结点的键值总是大于或等于任何一个子节点的键值,最小堆——父结点的键值总是小于或等于任何一个子节点的键值。常见的堆有二叉堆、二项式堆、斐波那契堆等。

(注意:实际应用中较少使用不是二叉堆的堆,所以很多语境下堆即指二叉堆,但本文中不使用这样的简称)

二叉堆:一种特殊的堆,是完全二叉树或者是近似完全二叉树。

(注意:二叉堆用于堆排序,但不意味着二叉堆就是堆排序,只是堆排序利用了二叉堆的优良性质)

此外,没有找到“近似完全二叉树”的统一定义,姑且认为完全二叉树分为近似完全二叉树和满二叉树。

你可能感兴趣的:(数据结构与算法,二叉树,平衡二叉搜索树,二叉堆)