数据结构之树、二叉树和森林

本文介绍了数据结构中树的概念,包括满二叉树和完全二叉树的特点,以及如何将树、森林转换为二叉树,反之亦然。此外,还探讨了哈夫曼树和哈夫曼编码,强调它们在最优二叉树构建和数据压缩中的应用。

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

1. 满二叉树

一棵非空高度为k(k>=0)的满二叉树,是有2的k+1次幂再减1个结点的二叉树。

特点:叶结点都在第k层上;每个分支结点都有两个子结点;叶结点个数等于非叶结点个数加1;

2. 完全二叉树

一颗包含n个结点高为k的二叉树T,当按层次顺序编号T的所有结点,对应一颗高为k的满二叉树中编号有1至n的那些结点时,T被称为完全二叉树。


3. 树转换成二叉树

在所有兄弟结点之间加一条连线;

对每个结点,除保留与其大孩子和其大兄弟结点的连线之外,去掉该结点与其其他孩子结点的连线;

调整部分连线方向、长短使之成为规范图形。


4. 森林转换成二叉树

方法一:引进一个虚拟总跟结点R,把森林中所有根结点看成兄弟结点。

方法二:将森林中每一颗树转换成二叉树,可将第一课二叉树的根结点视为总根,将其他二叉树的根结点视为兄弟。

5. 二叉树转换成树

如果二叉树根结点的右子树为空,则能自然地将该二叉树转换成对应的树:

对每个结点,找其大兄弟结点之父结点,并在两者间加一连线;

去掉所有父结点和右孩子之间的连线;

调整部分连线方向、长短使之成规范图形。


6. 二叉树转换成森林

如果根结点的右子树非空,则能将二叉树转换成相应的森林。

从根结点出发,断开其与其右孩子的连线,再将没有右孩子的二叉树按上述方法转换成树。

7. 哈夫曼树和哈夫曼编码

最优二叉树:在外结点权值分别为w0, w1, ......., wn-1的扩充二叉树中,加权外通路长度最小的扩充二叉树称为最优二叉树。

哈夫曼树是最优二叉树。

哈夫曼树的构造:

在森林中取权值最小的两个根结点,合并成一颗二叉树,并生成一个新结点T,作为这两个结点的父结点,T的权值是它的两个子结点的权值之和;

对新的森林重复上一步操作,直至森林中只有唯一的根结点。

哈夫曼编码:将哈夫曼树中每个分支结点的左分支标上0,右分支标上1,吧从根结点到每个叶结点的路径上的标号连接起来,作为该叶结点所代表的字符的编码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值