二叉树问题---通过先序和中序数组生成后序数组

【基本思路】

  根据当前的先序和中序数组,设置后序数组最右边的值,然后划分出左子树的先序、中序数组,以及右子树的先序、中序数组,先根据右子树的划分设置好后序数组,再根据左子树的划分,从右边到左边依次设置好后序数组的全部位置

下面是使用python3.5实现的代码

#python3.5
#通过先序和中序数组生成后序数组
def preInToPos(pre, mid):
    def preInPos(pre, pi, pj, mid, mi, mj, pos, sj, map):
        if pi > pj:
            return sj
        pos[sj] = pre[pi]
        sj -= 1
        index = map.get(pre[pi])
        sj = preInPos(pre, pi+index-mi+1, pj, mid, index+1, mj, pos, sj, map)
        return preInPos(pre, pi+1, pi+index-mi, mid, mi, index-1, pos, sj, map)


    if pre == None or mid == None:
        return []
    pos = [None for i in range(len(mid))]
    map = {}
    for i in range(len(mid)):
        map[mid[i]] = i
    preInPos(pre, 0, len(pre)-1, mid, 0, len(mid)-1, pos, len(mid)-1, map)
    return pos
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值