zoukankan      html  css  js  c++  java
  • 二叉排序树(BST)、平衡二叉树(AVL)、哈夫曼树的部分性质

    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。

    例子:

  • 相关阅读:
    宿主机( win 7 系统) ping 虚拟机VMware( cent os 6.6 ) 出现“请求超时”或者“无法访问目标主机”的解决方法
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
  • 原文地址:https://www.cnblogs.com/oaoa/p/13740222.html
Copyright © 2011-2022 走看看