五分钟玩转森林小知识

发布于:2022-11-30 ⋅ 阅读:(976) ⋅ 点赞:(0)

 

今天我们谈谈森林的知识点,简单理解,森林是有限棵树互不相交的集合。和现实中的一样,森林由树构成。所以我们也要强调森林的知识点,构成的是树。森林与树是可以相互变化的,对于任何一棵树,删除其根就变成森林,如果森林里面的树作为一个根的子树,就变成了树。

 

我们可以看看有三颗树构成的森林:

 

其中第三颗树我们不能看成二叉树,它是一个树。我们要知道二叉树和树概念是不同的。

森林的遍历一般是先序遍历和后序遍历,从左到右一次访问:

 

树、森林、二叉树的转换

树转换为二叉树

 

我们得知道树:兄弟关系,在二叉树里面是双亲和右孩子的关系树:双亲和长子,在二叉树里面是双亲和左孩子树:根节点没有兄弟,所以二叉树根节点就没有右子树知道这个我们可以看看下面的方式进行转换:

①加线 树中所有相邻兄弟结点之间加一条连线: ②去线 对树中的每个结点,只保留它与第一个孩子结点之间的连线,删去它与其他孩子结点之间的连线: ③层次调整 按照二叉树结点之间的关系进行层次调整。

我们可以看看下图转换过程:

 

在此我说一下遍历关系:

树的前序遍历序列等于对应二叉树的前序遍历序列

树的后序遍历序列等于对应二叉树的中序遍历序列

森林转换为二叉树

将一个森林转换为二叉树的方法是: ①将森林中的每棵树转换为二叉树: ②将每棵树的根结点视为兄弟,在所有根结点之间加上连线; ③按照二叉树结点之间的关系进行层次调整。

 

遍历对应关系如下:

森林的前序遍历序列等于对应二叉树的前序对应序列

森林的后序遍历序列等于对应二叉树的中序遍历序列

二叉树转换为树或森林

经过上面的讲述,有一个点需要我们注意一下,树转换成的二叉树,是没有右子树的。但是森林转换的是有的。

 

最优二叉树

哈夫曼树的基础知识点

最优二叉树是由哈夫曼提出的,所以也叫哈夫曼树。

我自己对其了解不是很深透,可以浅浅和大家说一下:

叶子结点的权值(weight)是对叶子结点赋予的一个有意义的数值量。设二叉树具有n个带权值的叶子结点,从根结点到各个叶子结点的路径长度与相应叶子结点权值的乘积之和称为二叉树的带权路径长度(weighted path length)记为:

 

如果给定4个叶子结点,其权值分别为{2,3,4,5},他可以构成许多的二叉树,但是他们是不同的带权路径长度,我们把带权路径长度最小的二叉树称为最优二叉树,也是哈曼夫树。

 

最优二叉树的特点:

1.权值越大的叶子结点越靠近根结点,而权值越小的叶子结点越远离根结点。

2.只有度为0(叶子结点)和度为2(分支结点)的结点,不存在度为1的结点。

哈夫曼算法的基本思想: (1)初始化:由给定的n个权值{w1,w2,…,wn}构造n棵只有一个根结点的二叉树,从而得到一个二叉树集合F={T1,T2....Tn} (2)选取与合并:在F中选取根结点权值最小的两棵二叉树分别作为左、右子树构造一棵新的二叉树,这棵新二叉树的根结点的权值为其左、右子树根结点的权值之和; (3)删除与加入:在F中删除作为左、右子树的两棵二叉树并将新建立的二叉树加入到F中 (4)重复(2以、(3)两步,当集合F中只剩下一棵二叉树时,这棵二叉树便是哈夫曼树,

我们可以看一个例子,W={2,3,4,5}来构造哈夫曼树的过程:

 

哈曼夫树的实现

下面是我老师PPT,感觉可以提高大家的理解,我后面理解了在写一篇如何使用哈曼夫树:

 

 

这次分享就是这些,也希望对你有些帮助,感谢点赞或指出我的不足点。

 

本文含有隐藏内容,请 开通VIP 后查看

微信公众号

今日签到

点亮在社区的每一天
去签到