/**
* 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 root
}
if root.Val == key{
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
}
if root.Val < key{
root.Right = deleteNode(root.Right, key)
return root
}else{
root.Left = deleteNode(root.Left, key)
return root
}
}