美文网首页
重建二叉树--前序+中序

重建二叉树--前序+中序

作者: hustyanye | 来源:发表于2019-07-28 16:13 被阅读0次

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

思路:
如果自己去重建,是先看前序遍历,找到第一个作为根,看它在中序遍历的位置,从而直接把左边的节点作为左子树,右边的节点作为右子树。反复遍历下去就好了。自然而然地可以想到用递归的方法解决。递归的思路挺简单,但是写代码的时候一定要记得处理好边界值。

  1. 看root在中序遍历的位置,如果位置大于0,说明左边有值,即有左子树。如果位置小于中序数组长度-1,说明右边有值,即有右子树。
  2. 确定好后,注意新数组的下标。这里主要提到1点,在python中,比如a=[1,2,3,4],如果写a[m:n] ,是指从m到n的切片,注意切片是包含m,但是不包含n!!!
  3. 个人写代码的语法小错误,即python在新建立对象的时候,直接写a = TreeNode(x)即可,不要写为 a = new TreeNode(x).。。
# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回构造的TreeNode根节点
    def reConstructBinaryTree(self, pre, tin):
        # write code here
        return self.buildTree(pre,tin)
        
    def buildTree(self,pre,tin):
        if len(pre) == 0:
            return None
            
        root = TreeNode(pre[0])
        pos_tin = tin.index(root.val)
        if pos_tin>0:
            root.left = self.buildTree(pre[1:pos_tin+1],tin[0:pos_tin])
        if pos_tin<len(tin)-1:
            root.right = self.buildTree(pre[pos_tin+1:len(pre)],tin[pos_tin+1:len(tin)])
        return root

相关文章

  • 重建二叉树

    已知二叉树的前序和中序遍历序列,以此重建二叉树。 重建二叉树,必须知道前序和中序序列,其他组合都不行。 publi...

  • Medium 105. Construct Binary Tre

    比较好理解,单纯记录一下 中序+后序 -> 重建二叉树 中序 + 前序 -> 重建二叉树 但是前序加后序就不可以重...

  • 一题一算法2018-02-06(重建二叉树)

    题目:重建二叉树 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍...

  • 面试题07. 重建二叉树

    重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中...

  • 07:重建二叉树

    题目07:重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果...

  • 剑指Offer-二叉树

    面试题7:重建二叉树 题目: 输入某二叉树的前序遍历和中序遍历的结果。请重建该二叉树。假设输入的前序遍历和中序遍历...

  • 《剑指offer》— JavaScript(4)重建二叉树

    重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果...

  • 重建二叉树

    重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果...

  • 《剑指offer》(四)-重建二叉树(java)

    重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果...

  • 重建二叉树

    原题链接 重建二叉树 题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍...

网友评论

      本文标题:重建二叉树--前序+中序

      本文链接:https://www.haomeiwen.com/subject/aahprctx.html