前言:你和一个修仙的人在草地上看到了一棵树,你说那棵树好漂亮,大仙说:“不那是一片森林,无数棵树在森林里”。所以说树和森里可以互相转换。(这里乱说一通,哈哈哈)
一、树转化为二叉树
下面看一棵普通的树
转化方法:
1.把所有兄弟结点连接起来
2.删掉除了结点第一个左孩子外的连线
变成了这个样子
3.旋转45度
变成这个样子
完成了
二、森林转化为二叉树
下面看一片森林
1.将每一棵树转化为二叉树
2.将每个二叉树根结点连接起来
变为这样
3.旋转45度
完成了
三、二叉树转换为树或者森林
1.如果结点X是结点Y的左孩子,那么将结点X的右孩子,右孩子的右孩子,右孩子的右孩子的右孩子.......与结点Y相连
2.去除双亲结点的与右孩子的连线
3.旋转角度
四、哈夫曼树
原理:树的带权路径长度最小(WPL)
用途:无损压缩,通信行业传输消息等等
(咋们先搞清几个定义)
结点的路径长度:从根结点到该结点的连线条树
树的路径长度:每个叶子结点的路径长度之和
结点的带权路径长度:结点的路径长度与该结点权值的乘积
树的带权路径长度最小(WPL):每个叶子结点的带权路径长度之和
方法:1.从结点中选权值最小的两个结点,较小的放在左边,把他们的权值之和放入一个新结点作为双亲结点
2.从结点中选最小的一个放在第二层,如果比新创建的结点小就放在左边,反则放在右边。把他们的权值之和放入一个新结点作为双亲结点
3.如果还有结点,按照方法2一直进行,直到所有结点放在树中