Guest User

Untitled

a guest
Oct 21st, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.11 KB | None | 0 0
  1. package Matala3;
  2.  
  3. public class BinarySearchTree {
  4. // tree root
  5. private BSTNode root;
  6.  
  7. //compare two objects (integer type)
  8.  
  9.  
  10. //compare 2 object as they were integer
  11. private static int compare(Object o1, Object o2) {
  12. int ans = 0;
  13. int n1 = ((Number)o1).intValue();
  14. int n2 = ((Number)o2).intValue();
  15. if(n1>n2) ans = 1;
  16. else if(n1<n2) ans = -1;
  17. return ans;
  18. }
  19.  
  20. public String getRoot(){
  21. return root.toString();
  22. }
  23. // insert element to the tree
  24. public void insert(Object elem) {
  25. root = insert(root, elem);
  26. }
  27. BSTNode insert(BSTNode tree, Object elem) {
  28. if (tree == null) {
  29. return new BSTNode(elem);
  30. }
  31. if (compare(elem, tree.data) < 0) {
  32. tree.left = insert(tree.left, elem);
  33. return tree;
  34. }
  35. else{
  36. tree.right = insert(tree.right, elem);
  37. return tree;
  38. }
  39. }
  40.  
  41. // search for element elem
  42. public boolean find(Object elem) {
  43. return find(root,elem);
  44. }
  45.  
  46.  
  47. boolean find(BSTNode tree, Object elem) {
  48. if (tree == null)
  49. return false;
  50. if (compare(elem, tree.data) == 0)
  51. return true;
  52. if (compare(elem, tree.data) < 0)
  53. return find(tree.left, elem);
  54. else
  55. return find(tree.right, elem);
  56. }
  57.  
  58. // print all tree nodes
  59. public void print() {
  60. print(root);
  61. System.out.println();
  62. }
  63. void print(BSTNode tree) {
  64. if (tree != null) {
  65. print(tree.left);
  66. System.out.print(tree.data+",");
  67. print(tree.right);
  68. }
  69. }
  70. // delete emement elem from the tree
  71. public void delete(Object elem) {
  72. root = delete(root, elem);
  73. }
  74. BSTNode delete(BSTNode tree, Object elem) {
  75. if (tree == null)
  76. return null;
  77. if (compare(elem, tree.data) == 0) {
  78. if (tree.left == null)
  79. return tree.right;
  80. else if (tree.right == null)
  81. return tree.left;
  82. else {
  83. if (tree.right.left == null) {
  84. tree.data = tree.right.data;
  85. tree.right = tree.right.right;
  86. return tree;
  87. }
  88. else {
  89. tree.data = removeSmallest(tree.right);
  90. return tree;
  91. }
  92. }
  93. }
  94. else if (compare(elem, tree.data) < 0) {
  95. tree.left = delete(tree.left, elem);
  96. return tree;
  97. }
  98. else {
  99. tree.right = delete(tree.right, elem);
  100. return tree;
  101. }
  102. }
  103. // function removeSmallest is used from function delete
  104. // to remove the smallest element of the tree
  105. Object removeSmallest(BSTNode tree) {
  106. if (tree.left.left == null) {
  107. Object smallest = tree.left.data;
  108. tree.left = tree.left.right;
  109. return smallest;
  110. }
  111. else {
  112. return removeSmallest(tree.left);
  113. }
  114. }
  115.  
  116. public Object minimum(){ //gives the minimal value of the tree.
  117.  
  118. BSTNode min=minimum(root);
  119. return min.data;
  120. }
  121.  
  122.  
  123. BSTNode minimum(BSTNode tree){
  124.  
  125. BSTNode lastNode;
  126.  
  127. if(tree.left==null)
  128. return tree;
  129. else{
  130.  
  131. lastNode= minimum(tree.left);
  132. return lastNode;
  133. }
  134. }
  135.  
  136. public Object maximum(){ //gives the maximal value of the tree.
  137.  
  138. BSTNode max=maximum(root);
  139. return max.data;
  140. }
  141.  
  142.  
  143. BSTNode maximum(BSTNode tree){
  144.  
  145. BSTNode lastNode;
  146. if(tree.right==null)
  147. return tree;
  148.  
  149. else{
  150.  
  151. lastNode= maximum(tree.right);
  152. return lastNode;
  153. }
  154.  
  155. }
  156. public int getSize(){ //gives the number of nodes in the tree.
  157. if(root!=null ){
  158.  
  159. int numberOfNodes=size(root);
  160. return numberOfNodes+1;
  161. } //plus the first node}
  162. else
  163. return 0;
  164. }
  165.  
  166. int size(BSTNode tree){
  167.  
  168. int num1 = 0, num2=0;
  169.  
  170. if( tree.left==null && tree.right==null) return 0;
  171.  
  172. if( tree.left!=null && tree.right!=null){
  173. num1 =size(tree.right)+1;
  174. num2=size(tree.left)+1;
  175. }
  176.  
  177. if( tree.left==null && tree.right!=null)
  178. num1 =size(tree.right)+1;
  179.  
  180. if(tree.left!=null && tree.right==null)
  181. num2=size(tree.left)+1;
  182.  
  183. return (num1+num2);
  184. }
  185.  
  186.  
  187. public Object findNearestSmall(Object elem){
  188.  
  189.  
  190. if(compare(elem, minimum())==0) return minimum();
  191.  
  192. if(compare(elem, minimum())>0 &&(compare(elem, maximum())<=0))
  193. return findNearestSmall(root,elem).data;
  194. else{
  195.  
  196. System.out.println("THE OBJECT IS NOT IN RANGE!!!");
  197. return null;
  198. }
  199. }
  200.  
  201. BSTNode findNearestSmall(BSTNode tree,Object elem){
  202. BSTNode a = null;
  203.  
  204. if(tree.right.left!=null){
  205. if((compare(tree.data, elem)<=0 && compare(tree.right.data,elem)>=0)
  206. && compare(tree.right.left.data,elem)<0){
  207. return (tree.right.left);
  208. }
  209. }
  210.  
  211. if((compare(tree.data, elem)>=0 && compare(tree.left.data,elem)<=0))
  212. return (tree.left);
  213.  
  214. if((compare(tree.data, elem)<=0 && compare(tree.right.data,elem)>=0))
  215. return (tree);
  216.  
  217. if(compare(tree.data,elem)<0)
  218. a=findNearestSmall(tree.right,elem);
  219.  
  220. if((compare(tree.data,elem)>0))
  221. a=findNearestSmall(tree.left,elem);
  222.  
  223. return a;
  224. }
  225.  
  226.  
  227. public Object findNearestGrate(Object elem){
  228.  
  229.  
  230. if(compare(elem, maximum())==0) return maximum();
  231.  
  232. if(compare(elem, minimum())>=0 &&(compare(elem, maximum())<0))
  233. return findNearestGrate(root,elem).data;
  234. else{
  235.  
  236. System.out.println("THE OBJECT IS NOT IN RANGE!!!");
  237. return null;
  238. }
  239. }
  240.  
  241.  
  242. BSTNode findNearestGrate(BSTNode tree,Object elem){
  243. BSTNode a = null;
  244.  
  245.  
  246. if(tree.left!=null && tree.left.right!=null){
  247.  
  248. if((compare(tree.data, elem)>=0 && compare(tree.left.data,elem)<=0)
  249. && compare(tree.left.right.data,elem)>0){
  250. return (tree.left.right);
  251. }
  252. }
  253.  
  254. if(tree.right.left!=null){
  255. if((compare(tree.data,elem)<=0 && (compare(tree.right.data, elem)>0) &&
  256. compare(tree.right.left.data, elem)>0))
  257. return(tree.right.left);
  258.  
  259. }
  260.  
  261. if((compare(tree.data, elem)<=0 && compare(tree.right.data,elem)>0))
  262. return (tree.right);
  263.  
  264. if((compare(tree.data, elem)>0 && compare(tree.left.data,elem)<=0))
  265. return (tree);
  266.  
  267. if(compare(tree.data,elem)<0)
  268. a=findNearestGrate(tree.right,elem);
  269.  
  270. if((compare(tree.data,elem)>0))
  271. a=findNearestGrate(tree.left,elem);
  272.  
  273. return a;
  274. }
  275.  
  276.  
  277.  
  278. //=======================================
  279.  
  280. public class BSTNode {
  281. public Object data;
  282. public BSTNode left;
  283. public BSTNode right;
  284. BSTNode(Object newdata) {
  285. data = newdata;
  286. left = null;
  287. right = null;
  288. }
  289. public String toString(){
  290. return "data: "+data+" ";
  291. }
  292. }
  293. //====================================
  294. }
Add Comment
Please, Sign In to add comment