lc-go/solutions/4/q450/solution.go

47 lines
844 B
Go

// Package q450 implements a solution for https://leetcode.com/problems/delete-node-in-a-bst/
package q450
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func del(node *TreeNode) *TreeNode {
if node == nil || node.Left == nil && node.Right == nil {
return nil // is leaf
}
if node.Left == nil {
return node.Right
}
if node.Right == nil {
return node.Left
}
p := node.Left
for p.Right != nil {
p = p.Right
}
p.Right = node.Right
return node.Left
}
func findAndDel(node **TreeNode, key int) {
if *node == nil {
return
}
if (**node).Val == key {
*node = del(*node)
} else if key < (**node).Val {
findAndDel(&(**node).Left, key)
} else {
findAndDel(&(**node).Right, key)
}
}
func deleteNode(root *TreeNode, key int) *TreeNode {
findAndDel(&root, key)
return root
}
var _ = deleteNode