LeetCode105:Construct Binary Tree from Preorder and Inorder Traversal

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

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

For example, given

preorder = [3,9,20,15,7]
inorder = [9,3,15,20,7]

Return the following binary tree:

    3
   / \
  9  20
    /  \
   15   7

LeetCode:链接

剑指offer同题:剑指Offer_编程题04:重建二叉树

本题为前序遍历和中序遍历,最少需要两种遍历方式,才能重建二叉树。

前序遍历序列中,第一个数字总是树的根结点的值。在中序遍历序列中,根结点的值在序列的中间,左子树的结点的值位于根结点的值的左边,而右子树的结点的值位于根结点的值的右边。剩下的我们可以递归来实现。

# 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 not preorder:
            return None
        '''当列表中只剩下一个值时,一定要注意返回的是preorder[0],而不是preorder 而且一定要TreeNode'''
        if len(preorder) == 1:
            return TreeNode(preorder[0])
        '''先找到根节点 要定义成TreeNode样式'''
        root = TreeNode(preorder[0])
        '''根据根节点数值定义到中序序列的index'''
        index = inorder.index(preorder[0])
        root.left = self.buildTree(preorder[1:index+1], inorder[:index])
        root.right = self.buildTree(preorder[index+1:], inorder[index+1:])
        return root

猜你喜欢

转载自blog.csdn.net/mengmengdajuanjuan/article/details/85852250
今日推荐