ZBLOG

/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func deleteNode(root *TreeNode, key int) *TreeNode { if root == nil { return nil } if...

在你提供的代码中,如果要删除的节点是根节点,并且该节点有左子树时,你选择将右子树中最大的节点与根节点进行值交换。然后,你使用递归调用deleteNode来删除右子树中的最大节点。

但是这样写是不正确的,因为你应该递归调用deleteNode来删除左子树中的最大节点。

以下是修正后的代码:

if root.Left != nil && root.Right != nil {
    // 首先要找左子树的最大的节点
    node := root.Left
    for node.Right != nil {
        node = node.Right
    }
    
    // 交换值
    root.Val = node.Val
    
    // 递归删除左子树中的最大节点
    root.Left = deleteNode(root.Left, node.Val)
} else if root.Left != nil {
    return root.Left
} else if root.Right != nil {
    return root.Right
}

return root

修正后的代码会先找到左子树中最大的节点(而不是右子树),并将其值与要删除的节点进行交换。然后,在递归地调用deleteNode函数来删除左子树中新的最大节点。其他情况下,直接返回相应的非空子树即可。

请记住,在实际使用时,请对修正后的代码进行全面测试和验证。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?