在你提供的代码中,如果要删除的节点是根节点,并且该节点有左子树时,你选择将右子树中最大的节点与根节点进行值交换。然后,你使用递归调用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助手提供,问题来源于学员提问