Guest User

Untitled

a guest
Feb 20th, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.28 KB | None | 0 0
  1.     public class BSTree<T1 extends Comparable<T1>, T2> {
  2.          class Node<T1, T2> {
  3.                 T1 key;
  4.                 T2 value;
  5.                 Node<T1, T2> left, right;
  6.                
  7.                 Node(T1 key, T2 value) {
  8.                         this.key = key;
  9.                         this.value = value;
  10.                 }
  11.         }
  12.         private Node<T1, T2> root = null;
  13.        
  14.         public boolean containsKey(T1 k) {
  15.                 Node<T1, T2> x = root;
  16.                 while (x != null) {
  17.                         int cmp = k.compareTo(x.key);
  18.                         if (cmp == 0) {
  19.                                 return true;
  20.                         }
  21.                         if (cmp < 0) {
  22.                                 x = x.left;
  23.                         } else {
  24.                                 x = x.right;
  25.                         }
  26.                 }
  27.                 return false;
  28.         }
  29.        
  30.         public T2 get(T1 k) {
  31.                 Node<T1, T2> x = root;
  32.                 while (x != null) {
  33.                         int cmp = k.compareTo(x.key);
  34.                         if (cmp == 0) {
  35.                                 return x.value;
  36.                         }
  37.                         if (cmp < 0) {
  38.                                 x = x.left;
  39.                         } else {
  40.                                 x = x.right;
  41.                         }
  42.                 }
  43.                 return null;
  44.         }
  45.        
  46.         public void add(T1 k, T2 v) {
  47.                 Node<T1, T2> x = root, y = null;
  48.                 while (x != null) {
  49.                         int cmp = k.compareTo(x.key);
  50.                         if (cmp == 0) {
  51.                                 x.value = v;
  52.                                 return;
  53.                         } else {
  54.                                 y = x;
  55.                                 if (cmp < 0) {
  56.                                         x = x.left;
  57.                                 } else {
  58.                                         x = x.right;
  59.                                 }
  60.                         }
  61.                 }
  62.                 Node<T1, T2> newNode = new Node<T1, T2>(k, v);
  63.                 if (y == null) {
  64.                         root = newNode;
  65.                 } else {
  66.                         if (k.compareTo(y.key) < 0) {
  67.                                 y.left = newNode;
  68.                         } else {
  69.                                 y.right = newNode;
  70.                         }
  71.                 }
  72.         }
  73.        
  74.         public void remove(T1 k) {
  75.                 Node<T1, T2> x = root, y = null;
  76.                 while (x != null) {
  77.                         int cmp = k.compareTo(x.key);
  78.                         if (cmp == 0) {
  79.                                 break;
  80.                         } else {
  81.                                 y = x;
  82.                                 if (cmp < 0) {
  83.                                         x = x.left;
  84.                                 } else {
  85.                                         x = x.right;
  86.                                 }
  87.                         }
  88.                 }
  89.                 if (x == null) {
  90.                         return;
  91.                 }
  92.                 if (x.right == null) {
  93.                         if (y == null) {
  94.                                 root = x.left;
  95.                         } else {
  96.                                 if (x == y.left) {
  97.                                         y.left = x.left;
  98.                                 } else {
  99.                                         y.right = x.left;
  100.                                 }
  101.                         }
  102.                 } else {
  103.                         Node<T1, T2> leftMost = x.right;
  104.                         y = null;
  105.                         while (leftMost.left != null) {
  106.                                 y = leftMost;
  107.                                 leftMost = leftMost.left;
  108.                         }
  109.                         if (y != null) {
  110.                                 y.left = leftMost.right;
  111.                         } else {
  112.                                 x.right = leftMost.right;
  113.                         }
  114.                         x.key = leftMost.key;
  115.                         x.value = leftMost.value;
  116.                 }
  117.         }
Add Comment
Please, Sign In to add comment