
代码
- preorder
[ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ]
- inorder
[ [左子树的中序遍历结果], 根节点, [右子树的中序遍历结果] ]
- 通过preorder和inorder得到当前数的根节点,我们建立当前的根节点
- 当前的根节点的Left则可以通过buildTree的下一层得到,
- 同理Right也一样
- 最后返回当前的root节点
- 至于下一层的buildTree的参数则是左子树的前序和左子树的中序
- 最后也就是最深处, len(preorder) == 0 ,则说明当前是遍历的上一层root节点的nil节点,直接return nil就可以了
func buildTree(preorder []int, inorder []int) *TreeNode {
if len(preorder) == 0 {
return nil
}
root := &TreeNode{preorder[0],nil,nil}
i := 0
for i++ {
if inorder[i] == preorder[0] {
break
}
}
root.Left = buildTree(preorder[1:i+1],inorder[:i])
root.Right = buildTree(preorder[i+1:],inorder[i+1:])
return root
}