DFS.
题目:
105. 从前序与中序遍历序列构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
3
/ \
9 20
/ \
15 7
代码:
class Solution:
def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
if len(preorder)==0:
return None
if len(preorder)==1:
return TreeNode(preorder[0])
root = preorder[0]
for i in range(len(inorder)):
if inorder[i] == root:
break
left = inorder[:i]
right = inorder[i+1:]
leftree = self.buildTree(preorder[1:1+len(left)], left)
rightree = self.buildTree(preorder[1+len(left):], right)
rootree = TreeNode(root)
rootree.left = leftree
rootree.right = rightree
return rootree
好了。