平衡二叉树、红黑树、哈夫曼树

本文介绍了平衡二叉树(AVL树)和红黑树两种自平衡树数据结构,探讨它们的平衡原理、插入调整策略以及优缺点。AVL树通过限制左右子树高度差确保高效查找,而红黑树利用颜色规则保持平衡。哈夫曼树则是一种用于数据压缩的最优带权路径长度最小的二叉树,通过构建过程实现最小带权路径长度。这些数据结构在信息技术领域中有着广泛的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

平衡二叉树(AVL树):
前提是有序的二叉树,它的左右子树的高度差不
超过1,而且它的所有子树也满足这个条件
如果一个有序二叉树呈现接近单支状(类似链表),
它的查找效率接近链表,因此只有达到平衡时它的
查找效率最高
由于节点的值受限,因此只能通过调整达到有序,而
不能进行值的修改
二叉树不平衡的基础原因:
X y
/ \ / \
y t1 以y为轴向右旋转 z x
/ \ / \ /
z t2 t3 t4 t2 t1
/
t3 t4

    x                             y
   / \                           / \
  t1  y     以y为轴向左旋转      x    z
     / \                       / \  / \
     t2 z                     t1 t2 t3 t4
       / \
      t3 t4

    x                   x               z
   / \                 / \             / \ 
  y   t1              z   t1          y    x
 / \                 / \             / \   / \
 t2 z                y t4           t2 t3 t4 t1
   / \              / \
  t3 t4            t2 t3
  以z为轴向左旋转   以z为轴向右旋转


    x                   x                   z                             
   / \                 / \                /    \
  t1  y               t1  z               x    y
     / \                 / \             / \  / \
     z  t2              t3  y           t1 t3 t4 t2
    / \                    / \
    t3 t4                 t4 t2
    以z为轴右旋             以z轴左旋       最终平衡

红黑树:
也是一种自平衡的树,它不是根据子树的高度差来调整平衡的,
而是给节点设置一种颜色,来达到平衡
红黑树的特性:
1、每个节点或者是黑色、或者是红色
2、根节点必须是黑色
3、每个叶子节点(NULL)是黑色
4、如何一个节点是红色,则它的子节点必须是黑色
不能有两个连续的红色节点
5、从一个节点到该节点的子孙节点的所有路径包含了
相同数量的黑色节点
保证大致上红黑树是平衡的(最长路径不超过最短路径的两倍)

    红黑树插入后的调整:
        插入的节点一定是红色
            1、如果父节点是黑色,直接插入
            2、如果父节点是红色,需要调整
                a、叔叔不存在 or 叔叔为黑色
                    进行 左旋 or 右旋
                    祖父节点置红 父节点置黑
                b、叔叔存在且为红色
                    祖父置红,父节点和叔叔置黑
                    把祖父节点当做当前节点,继续向上讨论调整

优点:插入、删除的效率比AVL树高
缺点:没有AVL树平均,查找效率没有AVL树高,但也并不差

哈夫曼树:
基本概念:
路径长度:从一个节点到另一个节点之间的路径条目数
根节点到第n层节点的路径长度为n-1
树的路径长度:从根节点出发到每个节点的路径长度之和
节点的权:若将树中节点赋予一个有某种意义的数值,该数值称为该节点的权
节点的带权路径长度:从根节点到该节点的路径长度与该节点的权的乘积
树的带权路径长度:所有的叶子节点的带权路径长度之和,称为WPL
WPL是衡量一棵带权二叉树优劣的关键

哈夫曼树的目的是为了生成一棵WPL最小的带权二叉树
构建哈夫曼树:
1、把n个带权节点存入一个集合F中,把每个节点左右子树置空
2、从F中选取权值最小的两个节点作为左右子树构建成一棵新的二叉树,
且新的根节点的权为左右子树的权值之和
3、从F中删除刚刚选出来的两个节点,把新得到的根节点放入F中
4、重复2、3步骤,直到F中只剩下一棵树,即是哈夫曼树

哈夫曼编码:
目的:解决当年远距离通信(电报)的数据传输的最优解
待发送的文字:BADCA DFEED
方法1:转成二进制发送A 000 B 001 共30个字符
方法2:
a、根据文件出现的频率,构建哈夫曼树
假设频率:A27 B8 C15 D15 E30 F5
b、规定哈夫曼树的左分支为0;右分支为1,则从根节点到
叶子节点经过分支所组成的0、1序列为该对应字符的哈夫曼编码
哈夫曼编码:A01 B1001 C101 D00 E11 F1000
100101001011001000111100 共25个字符
作用:数据压缩、文件压缩的其中一种方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值