Advertisement
alceray

Student info BST

May 20th, 2019
384
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.75 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. class node <T extends Comparable<T>>{
  4. public T data;
  5. public node left;
  6. public node right;
  7. public node(){
  8. left = null;
  9. right = null;
  10. }
  11. public node(T data){
  12. this.data = data;
  13. }
  14. public void setLeft(node<T> child){
  15. this.left = child;
  16. }
  17. public void setRight(node<T> child){
  18. this.right = child;
  19. }
  20. public void setData(T data){
  21. this.data = data;
  22. }
  23. public node<T> getLeft(){
  24. return left;
  25. }
  26. public node<T> getRight(){
  27. return right;
  28. }
  29. public T getData(){
  30. return data;
  31. }
  32. public boolean isLeaf(){
  33. return (getLeft()==null&&getRight()==null);
  34. }
  35. public boolean oneChild(){
  36. return ((getLeft()==null&&getRight()!=null)||(getLeft()!=null&&getRight()==null));
  37. }
  38. }
  39.  
  40. public class StudentInfo implements Comparable<StudentInfo> {
  41. public Integer studentNo;
  42. public String firstName;
  43. public String lastName;
  44. public StudentInfo(){
  45. studentNo = 0;
  46. firstName = "";
  47. lastName = "";
  48. }
  49. public StudentInfo(Integer studentNo, String firstName,String lastName){
  50. this.studentNo = studentNo;
  51. this.firstName = firstName;
  52. this.lastName = lastName;
  53. }
  54. public int getSN(){
  55. return studentNo;
  56. }
  57. public String getFN(){
  58. return firstName;
  59. }
  60. public String getLN(){
  61. return lastName;
  62. }
  63. @Override
  64. public int compareTo(StudentInfo t) {
  65. if(studentNo<t.studentNo)
  66. return -1;
  67. else if(studentNo>t.studentNo)
  68. return 1;
  69. return 0;
  70. }
  71. public void toStr(){
  72. System.out.println(studentNo+":"+firstName+" "+lastName);
  73. }
  74. }
  75.  
  76. class BST<T extends Comparable<T>>{
  77. Scanner in = new Scanner (System.in);
  78. private node<T> root;
  79. private node<T> parent;
  80. public BST(){
  81. root = null;
  82. parent = null;
  83. }
  84. public void insert(T data){
  85. if(root==null){
  86. root = new node (data);
  87. }
  88. else{
  89. parent = findParent(data);
  90. node<T> child = new node(data);
  91. if(child.getData().compareTo(parent.getData()) < 0 && parent.getLeft()==null){
  92. parent.setLeft(child);
  93. }
  94. else if(child.getData().compareTo(parent.getData()) > 0 && parent.getRight()==null){
  95. parent.setRight(child);
  96. }
  97. }
  98. }
  99. public node<T> findParent(T data){
  100. node<T> temp = root;
  101. node<T> prev = null;
  102. while(temp!=null){
  103. prev = temp;
  104. if(data.compareTo(temp.getData())<0){
  105. temp = temp.getLeft();
  106. }
  107. else if(data.compareTo(temp.getData())>0){
  108. temp = temp.getRight();
  109. }
  110. }
  111. return prev;
  112. }
  113. public node<T> findParent2(T data){
  114. node<T> temp = root;
  115. node<T> prev = null;
  116. while(temp!=null){
  117. if(temp.isLeaf() || temp.getData() == data){
  118. return prev;
  119. }
  120. prev = temp;
  121. if(data.compareTo(temp.getData())<0){
  122. temp = temp.getLeft();
  123. }
  124. else if(data.compareTo(temp.getData())>0){
  125. temp = temp.getRight();
  126. }
  127. }
  128. return prev;
  129. }
  130. public node<T> find(T key){
  131. node<T> n = root;
  132. while(n!=null){
  133. if(key.compareTo(n.getData())>0){
  134. n = n.getRight();
  135. }
  136. else if(key.compareTo(n.getData())<0){
  137. n = n.getLeft();
  138. }
  139. else{
  140. return n;
  141. }
  142. }
  143. return null;
  144. }
  145. public node<T> findSmallest(node<T> n){
  146. if(n.getLeft()==null){
  147. return n;
  148. }
  149. else{
  150. return findSmallest(n.getLeft());
  151. }
  152. }
  153. public boolean delete(T n){
  154. if(find(n)==null){
  155. return false;
  156. }
  157. node<T> deleteNode = find(n);
  158. parent = findParent2(deleteNode.getData());
  159. if(deleteNode.isLeaf()){
  160. if(deleteNode==root)
  161. root = null;
  162. else if(parent.getLeft()==deleteNode)
  163. parent.setLeft(null);
  164. else
  165. parent.setRight(null);
  166. }
  167. else if(deleteNode.oneChild()){
  168. node<T> child;
  169. if(deleteNode.getLeft()!=null)
  170. child = deleteNode.getLeft();
  171. else
  172. child = deleteNode.getRight();
  173. if(deleteNode == root){
  174. root = child;
  175. }
  176. else if(parent.getLeft().getData()==deleteNode.getData()){
  177. parent.setLeft(child);
  178. }
  179. else{
  180. parent.setRight(child);
  181. }
  182. }
  183. else{
  184. node<T> sub = findSmallest(deleteNode.getRight());
  185. node<T> p = findParent2(sub.getData());
  186. deleteNode.setData(sub.getData());
  187. if(p.getLeft().getData()==sub.getData())
  188. if(sub.oneChild())
  189. p.setLeft(sub.getRight());
  190. else
  191. p.setLeft(null);
  192. else
  193. if(sub.oneChild())
  194. p.setRight(sub.getRight());
  195. else
  196. p.setRight(null);
  197. }
  198. return true;
  199. }
  200. public void inorderTraverse(node<T> current){
  201. if(current != null){
  202. inorderTraverse(current.getLeft());
  203. System.out.print(current.getData()+" ");
  204. inorderTraverse(current.getRight());
  205. }
  206. }
  207. public void preorderTraverse(node<T> current){
  208. if(current != null){
  209. System.out.print(current.getData()+" ");
  210. preorderTraverse(current.getLeft());
  211. preorderTraverse(current.getRight());
  212. }
  213. }
  214. public void postorderTraverse(node<T> current){
  215. if(current != null){
  216. postorderTraverse(current.getLeft());
  217. postorderTraverse(current.getRight());
  218. System.out.print(current.getData()+" ");
  219. }
  220. }
  221. public void level(node<T> current){
  222. Queue<node> q = new LinkedList<>();
  223. q.add(current);
  224. while(!q.isEmpty()){
  225. node<T> temp = q.remove();
  226. System.out.print(temp.getData()+" ");
  227. if(temp.getLeft()!=null && temp.getRight()!=null){
  228. q.add(temp.getLeft());
  229. q.add(temp.getRight());
  230. }
  231. else if(temp.getLeft()!=null){
  232. q.add(temp.getLeft());
  233. }
  234. else if(temp.getRight()!=null){
  235. q.add(temp.getRight());
  236. }
  237. }
  238. }
  239. public void s_order_traverse(node<T> current){
  240. Queue<node<T>> q = new LinkedList<>();
  241. q.add(current);
  242. int level = 1;
  243. while(!q.isEmpty()){
  244. int a = 0;
  245. int b = q.size();
  246. while(a < b){
  247. node<T> temp = q.remove();
  248. System.out.print(temp.getData()+" ");
  249. if(level%2==0 || level==1){
  250. if(temp.getLeft()!=null){
  251. q.add(temp.getLeft());
  252. }
  253. if(temp.getRight()!=null){
  254. q.add(temp.getRight());
  255. }
  256. }
  257. else{
  258. if(temp.getRight()!=null){
  259. q.add(temp.getRight());
  260. }
  261. if(temp.getLeft()!=null){
  262. q.add(temp.getLeft());
  263. }
  264. }
  265. a++;
  266. }
  267. if(level!=1)
  268. reverseQ(q);
  269. level++;
  270. }
  271. }
  272. public void reverseQ(Queue<node<T>> q){
  273. Stack<node<T>> st = new Stack<>();
  274. while (!q.isEmpty()) {
  275. st.add(q.peek());
  276. q.remove();
  277. }
  278. while (!st.isEmpty()) {
  279. q.add(st.peek());
  280. st.pop();
  281. }
  282. }
  283. public void createTree(BST list){
  284. int[] stNo = new int[]{12,18,15,11,17,10,13,16,19,14};
  285. String[] FN = new String[]{"a","b","c","d","e","f","g","h","i","j"};
  286. String[] LN = new String[]{"a","b","c","d","e","f","g","h","i","j"};
  287. for(int i=0;i<stNo.length;i++){
  288. StudentInfo info = new StudentInfo(stNo[i],FN[i],LN[i]);
  289. list.insert(info);
  290. }
  291. list.inorderTraverse(root);
  292. }
  293. public static void main(String[]args){
  294. BST<StudentInfo> list = new BST<>();
  295. list.createTree(list);
  296. }
  297. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement