根据前序和中序遍历结果,构建二叉树
前序遍历的第一个节点,是数的根节点
从中序序列中找到根节点,则左边的都是左子树,右边的都是右子树
然后递归处理
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func buildTree(preorder []int, inorder []int) *TreeNode {
if len(preorder) == 0 {
return nil
}
res := &TreeNode{
Val: preorder[0],
}
if len(preorder) == 1 {
return res
}
idx := func(val int, nums []int) int {
for i, v := range nums {
if v == val {
return i
}
}
return -1
}(res.Val, inorder)
if idx == -1 {
return nil
}
res.Left = buildTree(preorder[1:idx+1], inorder[:idx])
res.Right = buildTree(preorder[idx+1:], inorder[idx+1:])
return res
}
网友评论