• 平衡二叉树与哈夫曼树(5)


    有了二叉排序树就可以使插入、搜索效率大大提高了,为什么还要引入平衡二叉树?

    二叉搜索树的结构与值的插入顺序有关,同一组数,若其元素的插入顺序不同,二叉搜索树的结构是千差万别的。举个例子,给出一组数[1,3,5,8,9,13]。

     若按照[1,3,5,8,9,13]这样的顺序插入

    如果在上面的二叉搜索树中查找13,是要将所有节点都遍历一遍的,时间复杂度就变成了O(n),几乎就是一个链表。

    为了避免二叉搜索树变成“链表”,我们引入了平衡二叉树,即让树的结构看起来尽量“均匀”,左右子树的节点数尽量一样多。

    平衡二叉树的定义:

    平衡二叉树,又称AVL树,指的是左子树上的所有节点的值都比根节点的值小,而右子树上的所有节点的值都比根节点的值大,

    且左子树与右子树的高度差最大为1。因此,平衡二叉树满足所有二叉排序(搜索)树的性质。

     

    那给定插入序列,如何生成一棵平衡二叉树呢?

    先按照生成二叉搜索树的方法构造二叉树,直至二叉树变得不平衡,即出现这样的节点:左子树与右子树的高度差大于1。

    主要有四种调整方式:LL(左旋)、RR(右旋)、LR(先左旋再右旋)、RL(先右旋再左旋)。

    但是在平衡二叉树调整的时候,往往使用旋转的方式,效果不明显。因此我使用下面的方式进行处理

    1)从树根部开始取3个平衡的点【4,8,11】

    2)进行中序遍历,取出3点钟的中位数字【8】

    3)按照树根在二叉树的性质下,排列

    哈夫曼树: 

    一般来说,用n(n>0)个带权值的叶子来构造二叉树,限定二叉树中除了这n个叶子外只能出现度为2的结点。那么符合这样条件的二叉树往往可构造出许多颗,其中带权路径长度最小的二叉树就称为哈夫曼树或最优二叉树

    展示哈夫曼树的构建过程:

     

    构建新的树:

     

    最后:

     总结为:总是将最大的权值放在离根节点最近的地方,将权值最小的放在叶子上。

  • 相关阅读:
    .Net并行编程
    ShopEx4.8.5.55328破解版
    PLinq
    C# 4.0 Parallel
    WCF、Web API、WCF REST、Web Service
    WCF 采用net.tcp协议
    MVC 过滤器3
    go orcale
    获取合并单元格中值的一个方法POI
    发起、维持和发展以利润为导向的企业的有目的性的行为(转)
  • 原文地址:https://www.cnblogs.com/topass123/p/12663296.html
Copyright © 2020-2023  润新知