您的位置:首页 > 其它

Leetcode: Construct Binary Tree from Preorder and Inorder Traversal

2015-08-24 10:42 429 查看
Get idea from Code Ganker.

Question

Given preorder and inorder traversal of a tree, construct the binary tree.

Note:

You may assume that duplicates do not exist in the tree.

Show Tags

Show Similar Problems

Analysis

refer to Code Ganker CSDN.f

Solution

[code]# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def buildTree(self, preorder, inorder):
        """
        :type preorder: List[int]
        :type inorder: List[int]
        :rtype: TreeNode
        """

        if preorder==None or inorder==None:
            return None

        self.dictin  = {}
        for ind,temp in enumerate(inorder):
            self.dictin[temp] = ind

        return self.helper(0, len(preorder)-1, preorder, 0, len(inorder)-1, inorder)

    def helper(self, preS, preE, preorder, inS, inE, inorder):
        if preS>preE or inS>inE:
            return None

        root = TreeNode(preorder[preS])
        index = self.dictin[root.val]
        root.left =  self.helper( preS+1, preS+(index-inS) , preorder, inS, index-1, inorder)
        root.right = self.helper( preS+(index-inS)+1, preE,  preorder, index+1, inE, inorder)

        return root
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: