1、二叉排序树的中序遍历得到的就是所有结点从小到大的排列。
平衡二叉树一定是二叉排序树。
二叉排序树上结点的关键字的值不可能相同。
2、二叉排序树的查找效率,主要取决于树的高度。
平均查找长度(ASL)=各层结点树 * 深度 / 总结点数
查找成功和查找失败 的平均查找长度,如下图所示,叶子结点可以查找成功,叶子结点再往下则查找失败。
3、二叉排序树删除一个结点,可以分三种情况。
a、删除叶结点,直接删除,不改变二叉排序树的性质。
b、删除的结点z有一个左子树或者右子树,则直接让z的子结点代替z。
c、若结点z有左右两颗子树,则用按中序排列得到的z结点的直接后继(或直接前驱)代替z。
第三种情况的例子:
4、平衡二叉树的 平衡因子=左子树深度-右子树深度
5、深度为h的平衡二叉树的最少结点数 Nh=Nh-1+Nh-2+1。
当所有非叶子结点平衡因子为1的时候,整个平衡二叉树拥有最少结点数。根结点的深度为1,所以左子树的高度为h-1,因为平衡因子为1,即根结点的左子树比右子树的深度大1,所以右子树的深度为h-2,这样可以拥有最少的结点数。我们设N0=0,由图可知N1=1,N2=2。其他深度的最少结点数可以根据公式计算,在实际计算中可以看到利用了斐波那契数列。
6、平衡二叉树AVL的调整方法:LL、RR、LR、RL
每次调整的是从下往上数最小的不平衡子树!!
只需要找三个结点。
7、带权路径长度(WPL),指的是所有叶结点的带权路径长度之和。
WPL= ∑ 每个叶结点的权值 * 该叶结点到根结点的路径长度
如图所示:
8、哈夫曼树:就是带权路径长度WPL最小的二叉树。
9、哈夫曼编码中没有一个编码是另一个编码的前缀。构造出的哈夫曼树左子树为0,右子树为1,即可得到编码。
相同的结点构造出来的哈夫曼树可能不同,但是他们的带权路径长度WPL是相同的。
构造过程中需要遵循几个原则:
a、左侧的结点小于右侧的结点
b、如果两个结点合并得到一个新结点,剩下的结点中有两个或两个以上结点的值都小于这个新结点,则需要把哪两个最小的结点,单独生成一棵树,随后再合并。如下图中的6、7、8、9。
例子: