LeetCode 105 [Construct Binary Tree from Preorder and Inorder Traversal]

原题

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

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

  2
 / \
1   3

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

解题思路

  • 本题与通过中序和后序遍历构造二叉树类似,同样是递归解决
  • 前序遍历数组的第一个值为根节点,根据这个值可以将中序遍历数组分成左右两部分,分别为左子树和右子树

完整代码

# 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 inorder:
            index = inorder.index(preorder[0])
            del preorder[0]
            root = TreeNode(inorder[index])
            root.left = self.buildTree(preorder, inorder[:index])
            root.right = self.buildTree(preorder, inorder[index + 1:])
            return root

你可能感兴趣的:(LeetCode 105 [Construct Binary Tree from Preorder and Inorder Traversal])