lintcode练习-73. 前序遍历和中序遍历树构造二叉树

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

样例

给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树:

  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, preorder, inorder):
        # write your code here
        root = self.mytree(inorder, preorder)
        return root
    def mytree(self, inorder, preorder):
        if not inorder and not preorder:
            return None
        data = preorder.pop(0)   # 因为postorder弹出一个元素, 所以后面的计算要考虑到
        index = inorder.index(data)
        root = TreeNode(data)
        root.left = self.mytree(inorder[0:index], preorder[0:index])
        root.right = self.mytree(inorder[index + 1:len(inorder)], preorder[index: len(preorder)])
        return root

猜你喜欢

转载自blog.csdn.net/qq_36387683/article/details/80960334