Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // https://leetcode.com/problems/delete-node-in-a-bst/
- /**
- * 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)
- {
- root = SearchNode(root, key);
- return root;
- }
- TreeNode SearchNode(TreeNode node, int key)
- {
- if (node == null)
- {
- return null;
- }
- if (node.val == key)
- {
- if (node.left != null)
- {
- var maxLeft = GetMaxLeftNode(node.left);
- node.left = DeleteNode(node.left, maxLeft.val);
- maxLeft.left = node.left;
- maxLeft.right = node.right;
- return maxLeft;
- }
- if (node.right != null)
- {
- var minRight = GetMinRightNode(node.right);
- node.right = DeleteNode(node.right, minRight.val);
- minRight.left = node.left;
- minRight.right = node.right;
- return minRight;
- }
- //delete leaf node;
- return null;
- }
- if (key < node.val)
- {
- node.left = SearchNode(node.left, key);
- }
- else
- {
- node.right = SearchNode(node.right, key);
- }
- return node;
- }
- TreeNode GetMaxLeftNode(TreeNode node)
- {
- if (node == null)
- {
- return null;
- }
- TreeNode it = node;
- while(it.right != null)
- {
- it = it.right;
- }
- return it;
- }
- TreeNode GetMinRightNode(TreeNode node)
- {
- if (node == null)
- {
- return null;
- }
- TreeNode it = node;
- while(it.left != null)
- {
- it = it.left;
- }
- return it;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement