数据结构——二叉树——红黑树和哈夫曼树

红黑树:

    也是一种自平衡的树,它不是根据子树的高度差来调整平衡的,而是给节点设置一种颜色来达到平衡

    红黑色的特性:

    1、每个节点或者是黑色、或者是红色

    2、根节点必须是黑色

    3、每个叶子节点(NULL)是黑色

    4、如果一个节点是红色,则它的子节点必须是黑色,不能有两个连续的红色节点

    5、从一个节点到该节点的子孙节点的所有路径上包含了相同数目的黑色节点

        保证大致上红黑树是平衡 (最长路径不超过最短路径的两倍)

    红黑树插入后的调整:     插入的节点一定是红色

        1、如果父节点是黑色,直接插入

        2、如果父节点是红色,需要调整

            a、叔叔不存在 or 叔叔为黑色

                进行左旋 or 右旋

                祖父节点置红 父节点置黑

            b、叔叔存在且为红色

                把祖父置红,父节点和叔叔置黑

                把祖父节点当做当前节点,继续向上讨论调整

    优点:插入、删除的效率比AVL树高

    缺点:没有AVL树平均,查找效率没有AVL树高,但也并不差


 

    哈夫曼树:

        基本概念:

        路径长度:从一个节点到另一个节点之间的路径条目数

                根节点到第n层节点的路径长度为n-1

        树的路径长度:从根节点出发到每个节点的路径长度之和

        节点的权:若将树中节点赋予一个有某种意义的数值,该数值就称为该节点的权

        节点的带权路径长度: 从根节点到该节点的路径长度与该节点的权的乘积

        树的带权路径长度(WPL):所有的叶子节点的带权路径长度之和

            WPL是衡量一棵带权二叉树优劣的关键

       

    例子:

    成绩:     <60       60-69   70-79   80-89   90-100

    等级:      E          D       C        B       A

    比例:      5%        15%     40%      30%      10%

    普通带权二叉树的WPL:5*1+15*2+40*3+30*4+10*4=315

    哈夫曼树的WPL:  40+30*2+15*3+10*4+5*4=205  

    哈夫曼树的目的是为了生成一棵WPL最小的带权二叉树

    构建哈夫曼树:

        1、把n个带权节点存入一个集合F中,把每个节点左右子树置空

        2、从F中选取权值最小的两个节点作为左右子树构建成一棵新的二叉树,且新的根节点的权为左右子树的权值之和

        3、从F中删除刚刚选出来的两个节点,把新得到的根节点放入F中

        4、重复2、3步骤,直到F中只剩下一棵树,即是哈夫曼树

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoyu1381

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值