根据提供的代码,有一个错误:
root.Left = Recursion(inorder, postorder, i, i + leftLength - 1, p, p + leftLength - 1)
应该是:
root.Left = Recursion(inorder, postorder, i, i + leftLength - 1, p, p + leftLength - 1)
此外,在 Recursion
函数中,需要先创建根节点 root
,然后再为其赋值。以下是修正后的代码:
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func Recursion(inorder []int, postorder []int, i int, j int, p int) *TreeNode {
if i > j {
return nil
}
root := &TreeNode{}
root.Val = postorder[p]
index := i
for inorder[index] != root.Val {
index++
}
leftLength := index - i
root.Left = Recursion(inorder, postorder, i, index-1, p-(j-index+1))
root.Right = Recursion(inorder, postorder, index+1, j, p-1)
return root
}
func buildTree(inorder []int, postorder []int) *TreeNode {
length := len(postorder)
if length == 0 {
return nil
}
return Recursion(inorder, postorder, 0,length-1,length-1)
}
这样就可以正确构建二叉树了。
内容由零声教学AI助手提供,问题来源于学员提问