Mitrezzz

[АПС] Лаб 8: Бинарни пребарувачки дрва Последователни броеви

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