解题思路
- 根据先序遍历确定根节点
- 根据中序遍历确定左右子树
- 逐层进行递归构造
复杂度分析
O(n)
示例代码
func buildTree(preorder []int, inorder []int) *TreeNode {
if len(preorder) == 0 || len(inorder) == 0 {
return nil
}
val := preorder[0]
root := &TreeNode{Val: val}
index := getIndex(inorder, val)
root.Left = buildTree(preorder[1:index+1], inorder[:index])
root.Right = buildTree(preorder[index+1:], inorder[index+1:])
return root
}
func getIndex(order []int, element int) int {
index := 0
for i := 0; i < len(order); i++ {
if order[i] == element {
index = i
}
}
return index
}