Advertisement
Kame3

Последователни броеви lab8.1

Dec 31st, 2020
1,664
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.11 KB | None | 0 0
  1. Последователни броеви Problem 1 (0 / 0)
  2.  
  3. Со помош на нанижано бинарно дрво потребно е да проверите дали при inorder изминување на дрвото важи дека секој следен елемент има вредност за 1 поголема од претходниот (треба да се испечати true или false). Притоа доколку ви е потребно можете да користите дополнителни функции, но не смеете да користите рекурзија и дополнителни структури.
  4.  
  5. Име на класата во Java: ConsecutiveNumbers
  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. }
  153.  
  154.  
  155. Sample input
  156.  
  157. 8
  158. 0 48 ROOT
  159. 1 46 LEFT 0
  160. 2 45 LEFT 1
  161. 3 47 RIGHT 1
  162. 4 50 RIGHT 0
  163. 5 51 RIGHT 4
  164. 6 50 LEFT 5
  165. 7 52 RIGHT 5
  166.  
  167. Sample output
  168.  
  169. false
  170.  
  171.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement