Advertisement
Nikolovska

[НП] лаб6.4 Бинарно дрво за пребарување

Jun 6th, 2018
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.78 KB | None | 0 0
  1. /*Генерички податочни структури (6)
  2. * Бинарно дрво за пребарување Problem 4 (0 / 0)
  3. Треба да се развие класа BinaryTreeSet за едноставно генеричко бинарно дрво за пребарување. Дрвото треба да ги има
  4. следните методи:
  5.  
  6. BinaryTreeSet() - креира ново празно бинарно дрво
  7. addElement(T element) - додава нов елемент во дрвото. Не се чуваат дупликати.
  8. contains(T element):boolean - враќа true доколку дрвото го содржи дадениот елемент.
  9. removeElement(T element):boolean - доколку елементот го има во дрвотo го остранува и враќа true, инаку враќа false
  10. (немора бришењто физички да го отстранува елементот од дрвото, може да имплементирате т.н. мрзливо бришење, на тој
  11. начин што ќе поставите некој маркер кој кажува дека јазелот е избришан).
  12. toString():String - враќа стринг во кои се содржат сите елементи во дрвото одделени со едно празно место. Елементите
  13. треба да се во редослед онака како што се добиваат со inorder изминување на дрвото. Доколку дрвото е празно (не содржи
  14. ниеден елемент) враќа "EMPTY" (наводниците се само за појаснување).
  15.  
  16. Sample input
  17. 0 1 2 3 2 2 2 2 2 stop
  18.  
  19. Sample output
  20. 1 2 3
  21. */
  22.  
  23. import java.util.ArrayList;
  24. import java.util.Scanner;
  25. import java.util.TreeSet;
  26. import java.util.Arrays;
  27.  
  28.  
  29. class BinaryTreeSet<E> {
  30.     private TreeSet<E> root;
  31.  
  32.     public BinaryTreeSet() {
  33.         root = new TreeSet<E>();
  34.     }
  35.  
  36.     public void addElement(E element){
  37.         if (!contains(element))
  38.             root.add(element);
  39.     }
  40.  
  41.     public boolean contains(E element){
  42.         return root.contains(element);
  43.     }
  44.  
  45.     public boolean removeElement(E element){
  46.         if (!contains(element))
  47.             return false;
  48.         root.remove(element);
  49.         return true;
  50.     }
  51.  
  52.     @Override
  53.     public String toString() {
  54.         if (root.isEmpty())
  55.             return "EMPTY";
  56.         E [] a=(E[])new Object[root.size()];
  57.         root.toArray(a);
  58.         Arrays.sort(a);
  59.         StringBuilder sb = new StringBuilder();
  60.         for(int i=0; i<a.length; i++){
  61.             sb.append(a[i]);
  62.             if (i != a.length-1)
  63.                 sb.append(" ");
  64.         }
  65.        
  66.         return sb.toString();
  67.     }
  68. }
  69.  
  70.  
  71. public class BinaryTreeSetTest {
  72.    
  73.     public static void main(String[] args) {
  74.         Scanner jin = new Scanner(System.in);
  75.         int t = jin.nextInt();
  76.         if ( t == 0 ) {
  77.             BinaryTreeSet<Integer> ts = new BinaryTreeSet<Integer>();
  78.             while ( jin.hasNextInt() ) {
  79.                 ts.addElement(jin.nextInt());
  80.             }
  81.             System.out.println(ts);
  82.         }
  83.         if ( t == 1 ) {
  84.             BinaryTreeSet<String> ts = new BinaryTreeSet<String>();
  85.             while ( true ) {
  86.                 String next = jin.next();
  87.                 if ( next.equals("stop") ) break;
  88.                 ts.addElement(next);
  89.             }
  90.             System.out.println(ts);
  91.         }
  92.         if ( t == 2 ) {
  93.             BinaryTreeSet<Long> ts = new BinaryTreeSet<Long>();
  94.             while ( jin.hasNextLong() ) {
  95.                 ts.addElement(jin.nextLong());
  96.             }
  97.             jin.next();
  98.             System.out.println(ts);
  99.             while ( jin.hasNextLong() ) {
  100.                 System.out.println(ts.contains(jin.nextLong()));
  101.             }
  102.             System.out.println(ts);
  103.         }
  104.         if ( t == 3 ) {
  105.             BinaryTreeSet<String> ts = new BinaryTreeSet<String>();
  106.             int counter = 0;
  107.             while ( true ) {
  108.                 if ( counter % 20 == 0 ) System.out.println(ts);
  109.                 ++counter;
  110.                 String next = jin.next();
  111.                 if ( next.equals("stop") ) break;
  112.                 if ( next.equals("add") ) {
  113.                     ts.addElement(jin.next());
  114.                 }
  115.                 if ( next.equals("remove") ) {
  116.                     ts.removeElement(jin.next());
  117.                 }
  118.                 if ( next.equals("query") ) {
  119.                     System.out.println(ts.contains(jin.next()));
  120.                 }
  121.             }
  122.             System.out.println(ts);
  123.         }
  124.         if ( t == 4 ) {
  125.             BinaryTreeSet<Long> ts = new BinaryTreeSet<Long>();
  126.             TreeSet<Long> control_set = new TreeSet<Long>();
  127.             ArrayList<Long> all = new ArrayList<Long>();
  128.             all.add(5L);
  129.             int n = jin.nextInt();
  130.             boolean exact = true;
  131.             for ( int i = 0 ; exact&&i < n ; ++i ) {
  132.                 if ( Math.random() < 0.4 ) {
  133.                     if ( Math.random() < 0.6 ) {
  134.                         long to_add = (long)(Math.random()*98746516548964156L);
  135.                         ts.addElement(to_add);
  136.                         control_set.add(to_add);
  137.                         all.add(to_add);
  138.                     }
  139.                     else {
  140.                         int add_idx = (int)(Math.random()*all.size());
  141.                         long to_add = all.get(add_idx);
  142.                         ts.addElement(to_add);
  143.                         control_set.add(to_add);
  144.                     }
  145.                 }
  146.                 else {
  147.                     if ( Math.random() < 0.4 ) {
  148.                         if ( Math.random() < 0.1 ) {
  149.                             long to_remove = (long)(Math.random()*98746516548964156L);
  150.                             ts.removeElement(to_remove);
  151.                             control_set.remove(to_remove);
  152.                         }
  153.                         else {
  154.                             int remove_idx = (int)(Math.random()*all.size());
  155.                             long to_remove = all.get(remove_idx);
  156.                             ts.removeElement(to_remove);
  157.                             control_set.remove(to_remove);
  158.                         }
  159.                     }
  160.                     else {
  161.                         if ( Math.random() < 0.3 ) {
  162.                             long to_query = (long)(Math.random()*98746516548964156L);
  163.                             exact &= ts.contains(to_query)==control_set.contains(to_query);
  164.                         }
  165.                         else {
  166.                             int query_idx = (int)(Math.random()*all.size());
  167.                             long to_query = all.get(query_idx);
  168.                             exact &= ts.contains(to_query)==control_set.contains(to_query);
  169.                         }
  170.                     }
  171.                 }
  172.             }
  173.             System.out.println(exact);
  174.         }
  175.     }
  176.  
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement