zoukankan      html  css  js  c++  java
  • 平衡二叉树与哈夫曼树(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的结点。那么符合这样条件的二叉树往往可构造出许多颗,其中带权路径长度最小的二叉树就称为哈夫曼树或最优二叉树

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

     

    构建新的树:

     

    最后:

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

  • 相关阅读:
    MSF 内网渗透笔记
    weblogic 安装部署详解
    获取指定ip段的所有存活主机的主机名和操作系统
    中间件安全加固之Jboss
    window下JBoss7 安装部署
    Window日志分析
    Apache安全配置基线指导
    dedeCMS解码
    日志分析技巧
    利用开源软件打造一个团队贡献平台
  • 原文地址:https://www.cnblogs.com/topass123/p/12663296.html
Copyright © 2011-2022 走看看