Advertisement
HeatPulse

Lab8-1 Posledovatelni Broevi(se sam se pisuva)

Dec 11th, 2019
1,577
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.28 KB | None | 0 0
  1. Последователни броеви Problem 1 (1 / 2)
  2. Со помош на нанижано бинарно дрво потребно е да проверите дали при inorder изминување на дрвото важи дека секој следен елемент има вредност за 1 поголема од претходниот (треба да се испечати true или false). Притоа доколку ви е потребно можете да користите дополнителни функции, но не смеете да користите рекурзија и дополнителни структури.
  3.  
  4. Име на класата во Java: ConsecutiveNumbers
  5.  
  6.  
  7.  
  8. import java.util.Scanner;
  9.  
  10. public class ConsecutiveNumbers {
  11.  
  12. public static void main(String[] args) {
  13.  
  14. Scanner scan = new Scanner(System.in);
  15.  
  16. BTree<Integer> btree = new BTree();
  17. int n = scan.nextInt();
  18. BNode<Integer> nodes[] = new BNode[n];
  19.  
  20. for (int i=0; i<n; ++i) {
  21. int index = scan.nextInt();
  22. int value = scan.nextInt();
  23. String where = scan.next();
  24. if (where.equals("ROOT")){
  25. nodes[index] = btree.makeRoot(value);
  26. scan.nextLine();
  27. }
  28. else {
  29. int whereTo = 1;
  30. if (where.equals("RIGHT"))
  31. whereTo = 2;
  32. int whichNode = scan.nextInt();
  33. scan.nextLine();
  34. nodes[index] = btree.addChild(nodes[whichNode], whereTo, value);
  35. }
  36. }
  37.  
  38. System.out.println(check(btree));
  39. }
  40.  
  41. public static boolean check(BTree<Integer> tree) {
  42.  
  43.  
  44. BNode<Integer> now = tree.head.left;
  45.  
  46. while (now.ltag == '+')
  47. now = now.left;
  48.  
  49. BNode<Integer> succ = tree.successorInorder(now);
  50.  
  51. while (succ != tree.head) {
  52.  
  53. if ((succ.info - now.info) != 1)
  54. return false;
  55.  
  56. now = succ;
  57. succ = tree.successorInorder(now);
  58. }
  59. return true;
  60. }
  61. }
  62.  
  63. class BNode<E> {
  64.  
  65. public E info;
  66. public BNode<E> left;
  67. public BNode<E> right;
  68. char ltag;
  69. char rtag;
  70.  
  71. static int LEFT = 1;
  72. static int RIGHT = 2;
  73.  
  74. public BNode(E info) {
  75. this.info = info;
  76. left = null;
  77. right = null;
  78. ltag = '-';
  79. rtag = '-';
  80. }
  81.  
  82. }
  83.  
  84. class BTree<E> {
  85.  
  86. public BNode<E> head;
  87.  
  88. public BTree() {
  89. head = new BNode<E>(null);
  90. // po definicija ako nema koren, t.e. ako stebloto e prazno
  91. head.left = head;
  92. head.ltag = '-';
  93. // kaj vodacot sekogas desnata vrska pokazuva kon samiot sebe
  94. head.right = head;
  95. head.rtag = '+';
  96. }
  97.  
  98. public BNode<E> makeRoot(E elem) {
  99. BNode<E> tmp = new BNode<E>(elem);
  100. head.left = tmp;
  101. head.ltag = '+';
  102.  
  103. tmp.left = head;
  104. tmp.ltag = '-';
  105. tmp.right = head;
  106. tmp.rtag = '-';
  107.  
  108. return tmp;
  109. }
  110.  
  111. public BNode<E> addChild(BNode<E> node, int where, E elem) {
  112. BNode<E> tmp = new BNode<E>(elem);
  113.  
  114. if (where == BNode.LEFT) {
  115.  
  116. if (node.ltag == '+') // veke postoi element
  117. return null;
  118.  
  119. tmp.left = node.left;
  120. tmp.ltag = '-';
  121. tmp.right = node;
  122. tmp.rtag = '-';
  123. node.left = tmp;
  124. node.ltag = '+';
  125. } else {
  126.  
  127. if (node.rtag == '+') // veke postoi element
  128. return null;
  129.  
  130. tmp.right = node.right;
  131. tmp.rtag = '-';
  132. tmp.left = node;
  133. tmp.ltag = '-';
  134. node.right = tmp;
  135. node.rtag = '+';
  136. }
  137.  
  138. return tmp;
  139. }
  140.  
  141. public BNode<E> successorInorder (BNode<E> node) {
  142.  
  143. if (node.rtag == '-')
  144. return node.right;
  145.  
  146. BNode<E> temp = node.right;
  147. while (temp.ltag != '-')
  148. temp = temp.left;
  149. return temp;
  150. }
  151.  
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement