树和森林与二叉树

、树的存储结构

 孩子兄弟表示法--CSNode

 二、树、森林与二叉树转换   都是用的孩子兄弟表示法

 

 树转换为二叉树后,根结点无右子树,因为树中的根结点没有兄弟。

例一:设树的结点个数n,那么当把T转换成一棵二叉树后,且根结点的子树上有(n-1)个结点

例二:设树的结点个数为n,那么当把T转换成一棵二叉树后,且根结点的子树上有(0)个结点

例三T是一棵树BT变换得的二叉树。Tn个非终端结点(度不为0的结点),则B右指针域为空的结点有n+1。画个B、T看看。①转化后的二叉树根结点右指针域为空(树的根结点没有兄弟);②树中每个非终端节点最后一个孩子无兄弟,转换为二叉树(右指针为兄弟)后,右指针为空。

 

左分支是孩子,右分支是兄弟 

由上图二叉树可知:B是A的孩子,C是B的兄弟,D是C的兄弟。所以B、C、D都是A的孩子。E、F是B的孩子。G、H、I是D的孩子

 森林里边有若干棵树,将每棵树转换为二叉树;将第二棵树的根结点看作是第一棵树根结点的兄弟,将第三棵树的根结点看作是第二棵树根结点的兄弟,即每棵树的根结点互为兄弟(所以在右分支画)

可知左子树就是第一棵树的子孙,右子树是第一棵树、第二棵树。

例一:设森林T中有4棵树,第一、二、三、四棵树的结点个数分别是n1,n2,n3,n4,那么当把森林T转换成一棵二叉树后,且根结点的右子树上有(n2+n3+n4)个结点

例二:设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有n+1个。①森林的每棵树的每个非终端节点最后一个孩子无兄弟,转换为二叉树(右指针为兄弟)后,右指针为空。②最后一棵树的根无兄弟

 三、树、森林遍历

要求:给定一棵树,写出先根遍历序列、后根遍历序列;给定森林,写出先序遍历序列、中序遍历序列;树与二叉树之间的相互转换;森林与二叉树之间的相互转换(画图题)

树采用孩子兄弟表示法,所以采用的存储结构是CSNode类型的

遍历这棵树用后根遍历时:E F B C I J K H G D A顺序与转换后的二叉树用中序遍历一致

树的先根遍历序列就是转换后的二叉树的先序遍历序列,树的后根遍历序列就是转换后的二叉树的中序遍历序列。

转换后的二叉树如下图:

 

例一: 如果T1是由有序树T转化而来的二叉树,那么T中结点的后根遍历就是T1中结点的(中序)。

 

 

 森林的先序遍历就是转换后的二叉树的先序遍历,森林的中序遍历序列(我怎么觉得看上去也像是森林的后序)就是转换后的二叉树的后序遍历


 四、哈夫曼树

1.路径:由一个结点(一般为根结点)到另一个结点所经过的分支所构成。                                       2.路径长度:路径上的分支数目 

3.树的路径长度:每个结点的路径长度之和

a到a的路径长度为0,a到b的路径长度为1,a到d的路径长度为2.....

4.带权路径长度:结点到根的路径长度与结点上权的乘积

5.树的带权路径长度WPL:树中所有叶子结点带权路径长度之和(假设有n个叶子结点。路径长度为I,权值为W)

 6.哈夫曼树:带权路径长度最小的二叉树

哈夫曼树:带权路径长度最小的二叉树

 因为哈夫曼树是带权路径长度最小的二叉树,所以让叶子结点越矮越好。由上图知,叶子结点是5个,又由二叉树的性质3:N0=N2+1。所以度为2的结点数为4。N1=0,无度为1的结点

故哈夫曼树中,总结点数一定是奇数个 


二、哈夫曼树(最优二叉树)构造的过程 

给定(5个叶子结点)A、B、C、D、E,构造一棵二叉树使WPL的值最小(树中所有叶子结点带权路径长度之和)

 

实际上,构造过程是构造非终端结点的

 

 

 

 2.3两步要循环n-1次

 

 这种题得先自己构造完之后再算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值