Given a root node reference of a BST and a key, delete the node with the given key in the BST. Return the root node reference (possibly updated) of the BST.
Basically, the deletion can be divided into two stages:
0 <= number of nodes <= 10^4-10^5 <= Node.val <= 10^5root is a valid binary search tree-10^5 <= key <= 10^5root = [5,3,6,2,4,null,7], key = 3[5,4,6,2,null,null,7]root = [5,3,6,2,4,null,7], key = 0[5,3,6,2,4,null,7]root = [], key = 0[]