美文网首页
leetcode 105.知前序遍历中序遍历求树

leetcode 105.知前序遍历中序遍历求树

作者: raphah | 来源:发表于2020-03-25 23:22 被阅读0次

    前序遍历 preorder = [3,9,20,15,7]
    中序遍历 inorder = [9,3,15,20,7]

        3
       / \
      9  20
        /  \
       15   7
    

    先构建树

    class TreeNode:
        def __init__(self,val):
            self.val = val
            self.left = None
            self.right = None
    

    已知前序遍历第一个值一定是根节点

    # root_val = preorder[0]  # 3
    root = TreeNode(preorder[0])
    

    找出该值在中序遍历中的index

    mid = inorder.index(root) # 1
    

    由中序遍历根结点左边都为左树,右边都为右树知

    前序遍历 [3,9,20,15,7]  根  [3]  左树[9] 右树[20,15,7]
    中序遍历 [9,3,15,20,7]  左树 [9]  根[3]  右树[15,20,7]
    
    inorder[:mid]  # 左树    
    inorder[mid+1:] # 右树    
    
    preorder[1:mid+1] # 左树
    preorder[mid+1:] #右树
    
    
    

    递归

    class Solution:
        def buildTree(self,preorder,inorder):
            if len(inorder) == 0:
                return None
            root = TreeNode(preorder[0])
            mid = inorder.index(root)
            
            root.left = self.buildTree(preorder[1:mid+1],inorder[:mid])
            root.right = self.buildTree(preorder[mid+1:],inorder[mid+1:])
            
            return root
    
    
    

    相关文章

      网友评论

          本文标题:leetcode 105.知前序遍历中序遍历求树

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