题目描述:
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
# 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 len(preorder) == 0:
return
root = TreeNode(preorder[0])
index = inorder.index(root.val)
left_preorder,left_inorder = preorder[1:index+1],inorder[:index]
right_preorder,right_inorder = preorder[index+1:],inorder[index+1:]
root.left = self.buildTree(left_preorder,left_inorder)
root.right = self.buildTree(right_preorder,right_inorder)
return root
菜鸟一枚,代码仅供参考,如有问题,望指正~