Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.95 KB | None | 0 0
  1. Последователни броеви Problem 1 (3 / 6)
  2. Со помош на нанижано бинарно дрво потребно е да проверите дали при inorder изминување на дрвото важи дека секој следен елемент има вредност за 1 поголема од претходниот (треба да се испечати true или false). Притоа доколку ви е потребно можете да користите дополнителни функции, но не смеете да користите рекурзија и дополнителни структури.
  3.  
  4. Име на класата во Java: ConsecutiveNumbers
  5.  
  6.  
  7. import java.io.IOException;
  8. import java.io.BufferedReader;
  9. import java.io.InputStreamReader;
  10. import java.util.NoSuchElementException;
  11. import java.util.StringTokenizer;
  12. import java.util.Stack;
  13. /*interface Stack<E> {
  14.  
  15.     // Elementi na stekot se objekti od proizvolen tip.
  16.  
  17.     // Metodi za pristap:
  18.  
  19.     public boolean isEmpty ();
  20.         // Vrakja true ako i samo ako stekot e prazen.
  21.  
  22.     public E peek ();
  23.         // Go vrakja elementot na vrvot od stekot.
  24.  
  25.     // Metodi za transformacija:
  26.  
  27.     public void clear ();
  28.         // Go prazni stekot.
  29.  
  30.     public void push (E x);
  31.         // Go dodava x na vrvot na stekot.
  32.  
  33.     public E pop ();
  34.         // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  35. }
  36.  
  37. class ArrayStack<E> implements Stack<E> {
  38.     private E[] elems;
  39.     private int depth;
  40.  
  41.     @SuppressWarnings("unchecked")
  42.     public ArrayStack (int maxDepth) {
  43.         // Konstrukcija na nov, prazen stek.
  44.         elems = (E[]) new Object[maxDepth];
  45.         depth = 0;
  46.     }
  47.  
  48.  
  49.     public boolean isEmpty () {
  50.         // Vrakja true ako i samo ako stekot e prazen.
  51.         return (depth == 0);
  52.     }
  53.  
  54.  
  55.     public E peek () {
  56.         // Go vrakja elementot na vrvot od stekot.
  57.         if (depth == 0)
  58.             throw new NoSuchElementException();
  59.         return elems[depth-1];
  60.     }
  61.  
  62.  
  63.     public void clear () {
  64.         // Go prazni stekot.
  65.         for (int i = 0; i < depth; i++)  elems[i] = null;
  66.         depth = 0;
  67.     }
  68.  
  69.  
  70.     public void push (E x) {
  71.         // Go dodava x na vrvot na stekot.
  72.         elems[depth++] = x;
  73.     }
  74.  
  75.  
  76.     public E pop () {
  77.         // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  78.         if (depth == 0)
  79.             throw new NoSuchElementException();
  80.         E topmost = elems[--depth];
  81.         elems[depth] = null;
  82.         return topmost;
  83.     }
  84. }*/
  85. class BNode<E> {
  86.    
  87.     public E info;
  88.     public BNode<E> left;
  89.     public BNode<E> right;
  90.    
  91.     static int LEFT = 1;
  92.     static int RIGHT = 2;
  93.    
  94.     public BNode(E info) {
  95.         this.info = info;
  96.         left = null;
  97.         right = null;
  98.     }
  99.    
  100.     public BNode() {
  101.         this.info = null;
  102.         left = null;
  103.         right = null;
  104.     }
  105.    
  106.     public BNode(E info, BNode<E> left, BNode<E> right) {
  107.         this.info = info;
  108.         this.left = left;
  109.         this.right = right;
  110.     }
  111.    
  112. }
  113. class BTree<E extends Comparable<E>> {
  114.    
  115.     public BNode<E> root;
  116.    
  117.     public BTree() {
  118.         root = null;
  119.     }
  120.    
  121.     public BTree(E info) {
  122.         root = new BNode<E>(info);
  123.     }
  124.    
  125.     public void makeRoot(E elem) {
  126.         root = new BNode(elem);
  127.     }
  128.    
  129.     public void makeRootNode(BNode<E> node) {
  130.         root = node;
  131.     }
  132.    
  133.     public BNode<E> addChild(BNode<E> node, int where, E elem) {
  134.        
  135.         BNode<E> tmp = new BNode<E>(elem);
  136.        
  137.         if (where == BNode.LEFT) {
  138.             if (node.left != null)  // veke postoi element
  139.                 return null;
  140.             node.left = tmp;
  141.         } else {
  142.             if (node.right != null) // veke postoi element
  143.                 return null;
  144.             node.right = tmp;
  145.         }
  146.        
  147.         return tmp;
  148.     }
  149.    
  150.     public BNode<E> addChildNode(BNode<E> node, int where, BNode<E> tmp) {
  151.        
  152.         if (where == BNode.LEFT) {
  153.             if (node.left != null)  // veke postoi element
  154.                 return null;
  155.             node.left = tmp;
  156.         } else {
  157.             if (node.right != null) // veke postoi element
  158.                 return null;
  159.             node.right = tmp;
  160.         }
  161.        
  162.         return tmp;
  163.     }
  164.     /*public static BNode<Integer> findNode(BNode<Integer> node, int n)
  165.     {
  166.         BNode<Integer> result = null;
  167.         if(node==null)
  168.         {
  169.             return null;
  170.         }
  171.         //int x = node.info.intValue();
  172.          if(node.info.intValue()==n)
  173.         {
  174.             return node;
  175.         }
  176.             if(node.left!=null)
  177.                 result = findNode(node.left, n);
  178.             if(result==null)
  179.                 result = findNode(node.right,n);
  180.        
  181.         return result;
  182.     }*/
  183.     public void resultCheck(int N)
  184.     {
  185.         boolean flag = true;
  186.         BNode<Integer> tmp = (BNode<Integer>)root;
  187.         int pomos = 0;
  188.         Stack<BNode<Integer>> stekce = new Stack<BNode<Integer>>();
  189.         while(true)
  190.         {
  191.             while(tmp!=null)
  192.             {
  193.                 stekce.push(tmp);
  194.                 //System.out.println(tmp.info);
  195.                 tmp = tmp.left;
  196.                
  197.             }
  198.             if(stekce.isEmpty())
  199.             {
  200.                 flag = true;
  201.                 //break;
  202.                 System.out.println("true");
  203.                 return;
  204.             }
  205.             tmp = stekce.pop();
  206.            
  207.             if(flag==false)
  208.             {
  209.                 int pomos2 = tmp.info;
  210.                 //System.out.println(pomos2);
  211.                 //System.out.println(pomos);
  212.                 if(pomos2!=pomos+1)
  213.                 {
  214.                     System.out.println("false");
  215.                     return;
  216.                 }
  217.                 pomos = tmp.info;
  218.             }
  219.             if(flag==true)
  220.             {
  221.                 pomos = tmp.info;
  222.                 flag = false;
  223.             }
  224.             //System.out.print(tmp.info + " ");
  225.             tmp = tmp.right;
  226.             if(flag==true)
  227.                 break;
  228.         }
  229.         //System.out.println("true");
  230.        
  231.         /*ArrayStack<BNode<Integer>> stekce = new ArrayStack<BNode<Integer>>(N);
  232.         BNode<Integer> tmp = (BNode<Integer>)root;
  233.         stekce.push(tmp);
  234.         boolean flagce = true;
  235.         boolean flagcule = true;
  236.         int bukva = 0;
  237.         while(!stekce.isEmpty())
  238.         {
  239.             System.out.println("prv loop");
  240.             while(tmp!=null&&(tmp.info.equals(bukva)))
  241.             {
  242.                 System.out.println("vtor loop");
  243.                 if(tmp.left!=null&&flagce)
  244.                 {
  245.                 tmp = tmp.left;
  246.                 stekce.push(tmp);
  247.                 }
  248.                 else if(tmp.left==null&&tmp.right!=null)
  249.                 {
  250.                     System.out.println(tmp.info);
  251.                     tmp = tmp.right;
  252.                     stekce.push(tmp);
  253.                 }
  254.                 else if(tmp.right!=null)
  255.                 {
  256.                     flagce = true;
  257.                     tmp = tmp.right;
  258.                     stekce.push(tmp);
  259.                 }
  260.                 else if(tmp.right==null&&tmp.left==null)
  261.                 {
  262.                     System.out.println(tmp.info);
  263.                     flagce = false;
  264.                     BNode<Integer> x = stekce.pop();
  265.                     bukva = x.info;
  266.                     if(x.right!=null)
  267.                     {
  268.                         tmp = x.right;
  269.                         continue;
  270.                     }
  271.                    
  272.                 }
  273.             }
  274.            
  275.            
  276.            
  277.            
  278.         }*/
  279.     }
  280.  
  281. }
  282. public class ConsecutiveNumbers  {
  283.     public static void main(String []args) throws Exception{
  284.         int i, index;
  285.         String action, line;
  286.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  287.         StringTokenizer st;
  288.         int N = Integer.parseInt(br.readLine());
  289.         BNode<Integer>nodes[] = new BNode[N];
  290.         BTree<Integer>tree = new BTree<Integer>();
  291.         for(i = 0; i<N; i++)
  292.             nodes[i] = new BNode<Integer>();
  293.         for(i = 0; i<N; i++)
  294.         {
  295.             line = br.readLine();
  296.             st = new StringTokenizer(line);
  297.             index = Integer.parseInt(st.nextToken());
  298.             nodes[index].info = Integer.parseInt(st.nextToken());
  299.             action = st.nextToken();
  300.             if(action.equals("LEFT"))
  301.             {
  302.                 tree.addChildNode(nodes[Integer.parseInt(st.nextToken())], BNode.LEFT, nodes[index]);
  303.             }
  304.             else if(action.equals("RIGHT"))
  305.             {
  306.                 tree.addChildNode(nodes[Integer.parseInt(st.nextToken())], BNode.RIGHT, nodes[index]);
  307.             }
  308.             else {
  309.                 tree.makeRootNode(nodes[index]);
  310.             }
  311.            
  312.            
  313.         }
  314.         tree.resultCheck(N);
  315.     }
  316.    
  317. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement