Advertisement
sweet1cris

Untitled

Jan 9th, 2018
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.35 KB | None | 0 0
  1. /**
  2.  * Definition of TreeNode:
  3.  * public class TreeNode {
  4.  *     public int val;
  5.  *     public TreeNode left, right;
  6.  *     public TreeNode(int val) {
  7.  *         this.val = val;
  8.  *         this.left = this.right = null;
  9.  *     }
  10.  * }
  11.  */
  12. public class Solution {
  13.     /**
  14.      * @param root: The root of the binary search tree.
  15.      * @param value: Remove the node with given value.
  16.      * @return: The root of the binary search tree after removal.
  17.      */
  18.     public TreeNode removeNode(TreeNode root, int value) {
  19.         TreeNode dummy = new TreeNode(0);
  20.         dummy.left = root;
  21.        
  22.         TreeNode parent = findNode(dummy, root, value);
  23.         TreeNode node;
  24.         if (parent.left != null && parent.left.val == value) {
  25.             node = parent.left;
  26.         } else if (parent.right != null && parent.right.val == value) {
  27.             node = parent.right;
  28.         } else {
  29.             return dummy.left;
  30.         }
  31.        
  32.         deleteNode(parent, node);
  33.        
  34.         return dummy.left;
  35.     }
  36.    
  37.     private TreeNode findNode(TreeNode parent, TreeNode node, int value) {
  38.         if (node == null) {
  39.             return parent;
  40.         }
  41.        
  42.         if (node.val == value) {
  43.             return parent;
  44.         }
  45.         if (value < node.val) {
  46.             return findNode(node, node.left, value);
  47.         } else {
  48.             return findNode(node, node.right, value);
  49.         }
  50.     }
  51.    
  52.     private void deleteNode(TreeNode parent, TreeNode node) {
  53.         if (node.right == null) {
  54.             if (parent.left == node) {
  55.                 parent.left = node.left;
  56.             } else {
  57.                 parent.right = node.left;
  58.             }
  59.         } else {
  60.             TreeNode temp = node.right;
  61.             TreeNode father = node;
  62.            
  63.             while (temp.left != null) {
  64.                 father = temp;
  65.                 temp = temp.left;
  66.             }
  67.            
  68.             if (father.left == temp) {
  69.                 father.left = temp.right;
  70.             } else {
  71.                 father.right = temp.right;
  72.             }
  73.            
  74.             if (parent.left == node) {
  75.                 parent.left = temp;
  76.             } else {
  77.                 parent.right = temp;
  78.             }
  79.            
  80.             temp.left = node.left;
  81.             temp.right = node.right;
  82.         }
  83.     }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement