ZBLOG

/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ // post 是左右中 // inorder 是左中右 func recursion(i, j int, inorder []int, p, q int, postorder []int) *TreeNode { ...

在递归函数的参数中,pq 表示了当前子树在 postorder 中的索引范围。但是,在递归调用时,下一个子树的索引范围应该是根据当前节点左右子树的长度来计算,而不是直接使用 inorderpos - i 作为左子树长度。

以下是修正后的代码:

func recursion(i, j int, inorder []int, p, q int, postorder []int) *TreeNode {
    if i > j {
        return nil
    }
    
    num := postorder[q] // 取当前节点值
    
    inorderpos := i
    for inorder[inorderpos] != num {
        inorderpos++
    }
    
    leftlength := inorderpos - i
    
    newnode := &TreeNode{Val: num}
    
    // 通过索引范围传递子数组给下一层递归
    newnode.Left = recursion(i, inorderpos-1, inorder, p, p+leftlength-1, postorder)
    newnode.Right = recursion(inorderpos+1, j, inorder, p+leftlength, q-1-leftlength+p+leftlength+1-i , postorder)
    
    return newnode
}

func buildTree(inorder []int, postorder []int) *TreeNode {
	if len(inorder) == 0 || len(postorder) == 0 {
		return nil
	}

	return recursion(0, len(inorder)-1, inorder, 0 , len(postorder)-1 , postorder)
}

修改后的代码将正确计算左右子树的索引范围,避免了访问到 -1 索引位的问题。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=10610

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?