add new solutions
This commit is contained in:
parent
67cad91898
commit
eb6ffe8114
24 changed files with 933 additions and 14 deletions
46
solutions/4/q450/solution.go
Normal file
46
solutions/4/q450/solution.go
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue