根据树的前根遍历和后跟遍历求解树的深度

两个前提

  • 先根遍历的第一项和后跟遍历的最后一项是根结点
  • 先根遍历最接近第一项的项在后根遍历中应当是最远离最后一项的项,如果后根中的项不符合这个规律,说明后根项之前(更远离最后一项的项)应当属于当前项下的层。

一个例题

题面

先根遍历:ABHCEFGD
后跟遍历:HBEGFCDA

操作方法

  1. 确定根节点
    \quad 根据前提一,可以容易地确定A是根节点。
  2. 确定层的区域分划
    \quad 首先,在先根遍历中最接近第一项的项是B,观察在后根遍历中B不是最远离最后一项的项,H与最后一项更远,因此H应当属于B下的项。
    \quad 接下来BH项已经在当前层确定区域,直接将他们删除得到新先根遍历ACEFGD,新后跟遍历EGFCDA,注意根不应当被移除。
    \quad 再次寻找先根遍历中最接近第一项的项,也就是C,在后根遍历中C不是距离最后一项最远的项,那么EGF都应当属于C下的项。
    \quad 同理,最后一项D在先根遍历是最接近第一项的项,在后根遍历是最远的项,单独成一个区域。
    \quad 因此我们得到了第一层的三个区域,我们将他们的先根遍历抄下来分别是:BH,CEFG,D,他们的后跟遍历分别是:HB,EGFC,D。
  3. 递归一层中的区域
    \quad 将第一层中的序列继续进行同样的操作,例如先根遍历BH,后跟遍历HB,再次从第一步开始操作,这时候B是根节点。当然,如果区域只有一个元素,不需要再进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值