几个技术问题,已知前序遍历中序遍历求后序遍历,哈弗曼编码,建立初始堆
来源:互联网 发布:毒药法术升级数据 编辑:程序博客网 时间:2024/06/07 10:53
一、已知前序遍历、中序遍历求后序遍历(可参考:link)
首先,对于
前序遍历:a->b->c(第一个字母是根节点)
中序遍历:b->a->c
后序遍历:b->c->a
例题:
已知
前序遍历: GDAFEMHZ
中序遍历: ADEFGHMZ
求后序遍历
根据前序遍历可知,G为根节点,在中序遍历中找到G,根据中序遍历的特点可知,G前面的部分为左子树,后面部分为右子树,则可知:
然后再看前序遍历,可知D为目前的左子树的根节点,又从中序遍历中可知,A为左子树,EF为右子树:
同理可知F为根节点:(为何F为左子树而不是右子树,因为在中序遍历中E在F的前面)
对于右子树HMZ同理可以得出:
二、哈弗曼编码(可参考:liink)
(情况一)9 4 5 2构建哈夫曼树
1、排序:2 4 5 9
2、挑选出最小的两个数为叶子构造树:
3、判断上述计算出的根是否比 5以及9都要大,这里不大,所以找出5、9中小的数继续生长树:
4、最后让树继续生长就可以了:
权值就是:2*3(树的层数)+4*3+5*2+9*1=37
( 情况二)6 13 18 7 30 16 构建哈夫曼树
1、排序:6 7 13 16 18 30
2、挑选最小的两个数当做叶子节点构建树:
2、13小于 16 18 30 所以继续构建树:
3、26小于30,继续构建树:
4、42大于18和30,分支生长:
5、合并:
权值就是:6*4+7*4+13*3+16*2+18*2+30*2=219
三、建立初始堆(可参考:link)
一组记录排序码为(5 11 7 2 3 17),则利用堆排序方法建立的初始堆为
1、构建完全二叉树
2、原理就是调整a【i】>=a【2*i+1】&&a【i】>=a【2*i+2】(反之也可,就是小根堆):
- 几个技术问题,已知前序遍历中序遍历求后序遍历,哈弗曼编码,建立初始堆
- 已知前序遍历和中序遍历,求后序遍历
- 已知前序遍历和中序遍历,求后序遍历
- 已知前序遍历和中序遍历,求后序遍历
- 已知前序遍历和中序遍历求后序遍历
- 已知中序遍历和前序遍历,求后序遍历
- 已知二叉树的前序遍历,中序遍历,求后序遍历的问题。
- 已知前序遍历和中序遍历求后序遍历和层次遍历
- POJ 2255 二叉树遍历 已知前序遍历 中序遍历 求后序遍历
- 已知树的前序遍历和中序遍历,求后序遍历
- 已知二叉树的中序遍历和前序遍历,如何求后序遍历
- 已知树的前序遍历和中序遍历,求后序遍历的方法(转)
- 已知二叉树的中序遍历和前序遍历,如何求后序遍历
- 已知二叉树的前序遍历和中序遍历求后序遍历
- 已知前序遍历和中序遍历,求后序遍历的程序实现
- 二叉树已知前序遍历和中序遍历,编程求后序遍历。
- 【算法入门经典】 已知树的前序遍历和中序遍历,求后序遍历
- 已知二叉树的前序遍历中序遍历,求后序遍历
- 周目标管理器week_target 1.0
- ubuntu 编译nginx时出错解决办法
- 细说JavaScript数据类型
- LeetCode—167. Two Sum II - Input array is sorted
- 车道检测数据集
- 几个技术问题,已知前序遍历中序遍历求后序遍历,哈弗曼编码,建立初始堆
- android平台HttpGet、HttpPost请求实例
- zTree中checkbox的具体项目用法
- 15、KVC、KVO和谓词
- UITextField和UITextView限制字数
- C++ Oracle OCCI 编程
- Filter高级开发(二)——实现敏感字符过滤功能
- arcgis总结——地理信息服务的发布以及通过rest服务进行geocode相关操作
- ACache轻量级缓存框架