树、森林与二叉树的转换和哈夫曼树

前言:你和一个修仙的人在草地上看到了一棵树,你说那棵树好漂亮,大仙说:“不那是一片森林,无数棵树在森林里”。所以说树和森里可以互相转换。(这里乱说一通,哈哈哈)

一、树转化为二叉树

下面看一棵普通的树

转化方法:

1.把所有兄弟结点连接起来

2.删掉除了结点第一个左孩子外的连线

变成了这个样子

3.旋转45度

变成这个样子

完成了

二、森林转化为二叉树

下面看一片森林

1.将每一棵树转化为二叉树

2.将每个二叉树根结点连接起来

变为这样

3.旋转45度

完成了

三、二叉树转换为树或者森林

1.如果结点X是结点Y的左孩子,那么将结点X的右孩子,右孩子的右孩子,右孩子的右孩子的右孩子.......与结点Y相连

2.去除双亲结点的与右孩子的连线

3.旋转角度

四、哈夫曼树

原理:树的带权路径长度最小(WPL)

用途:无损压缩,通信行业传输消息等等

(咋们先搞清几个定义)

结点的路径长度:从根结点到该结点的连线条树

树的路径长度:每个叶子结点的路径长度之和

结点的带权路径长度:结点的路径长度与该结点权值的乘积

树的带权路径长度最小(WPL):每个叶子结点的带权路径长度之和

方法:1.从结点中选权值最小的两个结点,较小的放在左边,把他们的权值之和放入一个新结点作为双亲结点

           2.从结点中选最小的一个放在第二层,如果比新创建的结点小就放在左边,反则放在右边。把他们的权值之和放入一个新结点作为双亲结点

             3.如果还有结点,按照方法2一直进行,直到所有结点放在树中

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值