diff --git a/cs/delete-node-in-a-bst.cs b/cs/delete-node-in-a-bst.cs new file mode 100644 index 0000000..bf2e469 --- /dev/null +++ b/cs/delete-node-in-a-bst.cs @@ -0,0 +1,45 @@ +/** + * Definition for a binary tree node. + * public class TreeNode { + * public int val; + * public TreeNode left; + * public TreeNode right; + * public TreeNode(int val=0, TreeNode left=null, TreeNode right=null) { + * this.val = val; + * this.left = left; + * this.right = right; + * } + * } + */ +public class Solution { + public TreeNode DeleteNode(TreeNode root, int key) { + if (root == null) { + return null; + } + + if (key == root.val) { + if (root.left == null) { + return root.right; + } + + if (root.right == null) { + return root.left; + } + + // find successor + var node = root.right; + while (node.left != null) { + node = node.left; + } + + root.val = node.val; + root.right = DeleteNode(root.right, node.val); + } else if (key < root.val) { + root.left = DeleteNode(root.left, key); + } else if (key > root.val) { + root.right = DeleteNode(root.right, key); + } + + return root; + } +}