数据结构作业感悟:由已知序列求对应树

由三个例题解释:
一、
已知先根次序访问序列:GFKDAIEBCHJ
后根次序访问序列:DIAEKFCJHBG,求树

先根次序访问=先序遍历
后根次序访问=后序遍历

先序遍历的规律是:根——左——右
中序遍历的规律是:左——根——右
后序遍历的规律是:左——右——根

可由先序遍历得到的先根序列GFKDAIEBCHJ得知G必定为根节点
而后在后根(后序)序列DIAEKFCJHBG中找到G,单独隔出
DIAEKFCJHB |G|
则G左侧都是它的子树节点
再继续看GFKDAIEBCHJ的G后面是F,可知F是G的下一个节点
在DIAEKFCJHB |G|中再隔出F
DIAEK |F| CJHB |G|
则F左侧的都为F的子树节点
再继续看先根序列F后面是K,在后根序列中隔出K
DIAE |K| |F| CJHB |G|
则K左侧都为K的子树节点
再继续看先根序列K后面为D,隔出D
|D| IAE |K| |F| CJHB |G|
D左侧没有节点了,可知D为一个叶子节点
继续看先根序列D后面是A,隔出A
|D| I |A| E |K| |F| CJHB |G|
A左侧的D已经判断过故无视,所以I是A的子树节点
故继续看先根序列可知I是A的子节点,而后的E同理可判断是K的另一个子节点
再继续看E后面是B,隔出
(省略K分支)CJH |B| |G|
可知左侧的CJH是B的子树节点
继续看先根序列B后面是C,隔出
|C| JH |B| |G|
C左侧没有空余的节点了,故C是一个叶子节点
继续看C后面是H,隔出H
|C| J |H| |B| |G|
H左侧为J,故J是H的子节点
最后的J同理可知J为叶子节点
故得到树的图:
在这里插入图片描述
二、
已知先序序列为EBADCFHGIKJ
中序遍历为ABCDEFGHIJK

同样先看先序序列,可知E为根节点
在中序序列中隔出E,由中序遍历的规律得知子序列的推算往左右两侧进行
ABCD |E| FGHIJK
继续看先序序列,E后面为B,隔出B
A |B| CD |E| FGHIJK
继续看先序序列往后的ADC都在中序序列中E的左侧,故可推出它们都是B的子树节点,且D为C的子节点,A、C为B的子节点,B分支推算完成
先序序列再继续往后是F,可知F为E的另一个子节点,隔出F
(B分支省略)|F| GHIJK
可知右侧都为F的子节点
继续看先序序列F后为H,隔出H
|F| G |H| IJK
可知再往后的GIKJ都是H的子树节点,以此类推可知J为K的子节点,K为I的子节点,I和G是H的子节点,F分支推算完成
最终得到树的图:
在这里插入图片描述
(此处I下面漏了个K,应该是I——K——J的)

三、
已知中序序列为DCBGEAHFIJK
后序序列为DCEGBFHKJIA,求树

与二类似,但是条件为中序与后序序列,不过因为只要求树的图而不用考虑二叉树的左右子节点故所以实际上将后序序列倒着读就行

由后序序列DCEGBFHKJIA可知A必定为根节点,隔出A
DCBGE |A| HFIJK
由于此时A在序列的中间,由中序遍历的规律得知子序列的推算往左右两侧进行
A左边是I,在中序序列DCBGEAHFIJK中隔出I
DCBGE |A| HF |I| JK
可见I在A的右侧,是A的右子节点,故由I继续向两侧推算
可见后序序列中I左侧的FHKJ都在中序序列中A的右侧,故可直接推出它们都是I的子节点,且K为J的子节点,H为F的子节点,故F和J是I的子节点,I分支推算完成
从后序序列继续向左可知B是A的另一个子节点,B分支部分与I分支推算过程相同
最终得到的树图为:

在这里插入图片描述

  • 17
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值