lintcode练习-72. 中序遍历和后序遍历树构造二叉树

描述

根据中序遍历和后序遍历树构造二叉树

你可以假设树中不存在相同数值的节点

您在真实的面试中是否遇到过这个题?  

样例

给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2]

返回如下的树:

  2

 /  \

1    3


实现代码:

思路:

代码:

"""
Definition of TreeNode:
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None
"""
class Solution:
    """
    @param inorder: A list of integers that inorder traversal of a tree
    @param postorder: A list of integers that postorder traversal of a tree
    @return: Root of a tree
    """
    def buildTree(self, inorder, postorder):
        # write your code here
        return self.mytree(inorder, postorder)
   
    def mytree(self, inorder, postorder):
        if not inorder or not postorder:
            return None
        data = postorder.pop()  # 因为postorder弹出一个元素, 所以后面的计算要考虑到
        index = inorder.index(data)
       
        root = TreeNode(data)
        root.left = self.mytree(inorder[0:index], postorder[0:index])
        root.right = self.mytree(inorder[index+1:len(inorder)], postorder[index: len(postorder)])
        return root






猜你喜欢

转载自blog.csdn.net/qq_36387683/article/details/80960287
今日推荐