二叉搜索树删除节点实现
二叉搜索树(左子树比根节点小,右子树比根节点大) 里面查找并删除一个值和节点, 删除后保持搜索树结构,返回树的跟节点,假定树节点的值不重复
jstype TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func deleteNode(root *TreeNode, key int) *TreeNode {
if root == nil {
return nil
}
if key < root.Val {
root.Left = deleteNode(root.Left, key)
} else if key > root.Val {
root.Right = deleteNode(root.Right, key)
} else {
// 找到要删除的节点
if root.Left == nil {
return root.Right
}
if root.Right == nil {
return root.Left
}
// 左右子树都存在:找右子树最小节点
minNode := root.Right
for minNode.Left != nil {
minNode = minNode.Left
}
root.Val = minNode.Val
root.Right = deleteNode(root.Right, minNode.Val)
}
return root
}
本文作者:曹子昂
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!