根据一棵树的前序遍历与中序遍历构造二叉树。
方案一:参考了别人的,感觉有点问题
[3, 9, 20, 15, 7], [9, 15, 3, 20, 7]
class Solution(object):
def buildTree(self, preorder, inorder):
if inorder == []:
return None
root = TreeNode(preorder[0])
x = inorder.index(root.val)#找到根在中序中的位置
root.left = self.buildTree(preorder[1:x+1], inorder[0:x])
root.right = self.buildTree(preorder[x+1:], inorder[x+1:])
return root
方案二:
class Solution(object):
def buildTree(self, preorder, inorder):
"""
:type preorder: List[int]
:type inorder: List[int]
:rtype: TreeNode
"""
if preorder == []:
return
root = TreeNode(preorder[0])
if len(preorder) == 1:
return root
index = inorder.index(root.val)
leftlist, rightlist = [], []
for n in preorder:
if n in inorder[: index]:
leftlist.append(n)
elif n in inorder[index + 1:]:
rightlist.append(n)
lenright = len(inorder) - index - 1
root.left = self.buildTree(leftlist, inorder[: index])
root.right = self.buildTree(rightlist, inorder[index + 1:])
return root