public static LeetCode450TreeNode DeleteNode(LeetCode450TreeNode root, int key) { if (root == null) { return(null); } if (key > root.val) { root.right = DeleteNode(root.right, key); } else if (key < root.val) { root.left = DeleteNode(root.left, key); } else { if (!root.IsLeaf()) { root = null; } else if (root.HasRightChild()) { root.val = Successor(root); root.right = DeleteNode(root.right, root.val); } else { root.val = Predecessor(root); root.left = DeleteNode(root.left, root.val); } } return(root); }
private static int Predecessor(LeetCode450TreeNode root) { root = root.left; while (root.right != null) { root = root.right; } return(root.val); }
public LeetCode450TreeNode(int val = 0, LeetCode450TreeNode left = null, LeetCode450TreeNode right = null) { this.val = val; this.left = left; this.right = right; }