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