Advertisement
fensa08

[APS] Kolokvium 2 - Proverka na Validnost

Jan 21st, 2020
802
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.67 KB | None | 0 0
  1. Проверка на валидност Problem 6 (0 / 0)
  2.  
  3. Да се напише функција ValidityCheck што ќе провери дали кај дадено дрво важи дека за секој јазел неговите деца имаат info-поле со помала или еднаква вредност од вредноста на info-полето на тој јазел и во зависност од тоа да се испечати true или false.
  4.  
  5. Име на класата (Java): ValidityCheck.
  6.  
  7.  
  8. =============================================================================================================================
  9. import java.io.BufferedReader;
  10. import java.io.InputStreamReader;
  11. import java.util.StringTokenizer;
  12.  
  13. class BNode<E> {
  14.  
  15.     public E info;
  16.     public BNode<E> left;
  17.     public BNode<E> right;
  18.  
  19.     static int LEFT = 1;
  20.     static int RIGHT = 2;
  21.  
  22.     public BNode(E info) {
  23.         this.info = info;
  24.         left = null;
  25.         right = null;
  26.     }
  27.  
  28.     public BNode() {
  29.         this.info = null;
  30.         left = null;
  31.         right = null;
  32.     }
  33.  
  34.     public BNode(E info, BNode<E> left, BNode<E> right) {
  35.         this.info = info;
  36.         this.left = left;
  37.         this.right = right;
  38.     }
  39.  
  40. }
  41.  
  42. class BTree<E> {
  43.  
  44.     public BNode<E> root;
  45.  
  46.     public BTree() {
  47.         root = null;
  48.     }
  49.  
  50.     public BTree(E info) {
  51.         root = new BNode<E>(info);
  52.     }
  53.  
  54.     public void makeRoot(E elem) {
  55.         root = new BNode(elem);
  56.     }
  57.  
  58.     public void makeRootNode(BNode<E> node) {
  59.         root = node;
  60.     }
  61.  
  62.     public BNode<E> addChild(BNode<E> node, int where, E elem) {
  63.  
  64.         BNode<E> tmp = new BNode<E>(elem);
  65.  
  66.         if (where == BNode.LEFT) {
  67.             if (node.left != null)  // veke postoi element
  68.                 return null;
  69.             node.left = tmp;
  70.         } else {
  71.             if (node.right != null) // veke postoi element
  72.                 return null;
  73.             node.right = tmp;
  74.         }
  75.  
  76.         return tmp;
  77.     }
  78.  
  79.     public BNode<E> addChildNode(BNode<E> node, int where, BNode<E> tmp) {
  80.  
  81.         if (where == BNode.LEFT) {
  82.             if (node.left != null)  // veke postoi element
  83.                 return null;
  84.             node.left = tmp;
  85.         } else {
  86.             if (node.right != null) // veke postoi element
  87.                 return null;
  88.             node.right = tmp;
  89.         }
  90.  
  91.         return tmp;
  92.     }
  93.  
  94. }
  95.  
  96. public class ValidityCheck {
  97.  
  98.     public static boolean checkValidity(BNode<Integer> node){
  99.         if(node == null){
  100.             return true;
  101.         }
  102.         if(node.left == null && node.right == null){
  103.             return true;
  104.         }
  105.         // 2 deca
  106.         if(node.left != null && node.right != null && node.info >= node.left.info && node.info >= node.right.info){
  107.             return checkValidity(node.left) && checkValidity(node.right);
  108.         }
  109.         //levo dete
  110.         if(node.left != null && node.right == null && node.info >= node.left.info){
  111.             return checkValidity(node.left);
  112.         }
  113.         //desno dete
  114.         if(node.left == null && node.right != null && node.info >= node.right.info){
  115.             return checkValidity(node.right);
  116.         }
  117.  
  118.         return false;
  119.  
  120.  
  121.  
  122.     }
  123.  
  124.     public static void main(String[] args) throws Exception {
  125.         int i, j, k;
  126.         int index;
  127.         String action;
  128.  
  129.         String line;
  130.  
  131.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  132.         StringTokenizer st;
  133.  
  134.         int N = Integer.parseInt(br.readLine());
  135.  
  136.         BNode<Integer> nodes[] = new BNode[N];
  137.         BTree<Integer> tree = new BTree<Integer>();
  138.  
  139.         for (i=0;i<N;i++)
  140.             nodes[i] = new BNode<Integer>();
  141.  
  142.         for (i = 0; i < N; i++) {
  143.             line = br.readLine();
  144.             st = new StringTokenizer(line);
  145.             index = Integer.parseInt(st.nextToken());
  146.             nodes[index].info = Integer.parseInt(st.nextToken());
  147.             action = st.nextToken();
  148.             if (action.equals("LEFT")) {
  149.                 tree.addChildNode(nodes[Integer.parseInt(st.nextToken())], BNode.LEFT, nodes[index]);
  150.             } else if (action.equals("RIGHT")) {
  151.                 tree.addChildNode(nodes[Integer.parseInt(st.nextToken())], BNode.RIGHT, nodes[index]);
  152.             } else {
  153.                 // this node is the root
  154.                 tree.makeRootNode(nodes[index]);
  155.             }
  156.         }
  157.  
  158.         br.close();
  159.  
  160.         // vasiot kod ovde
  161.         if(checkValidity(tree.root) == true){
  162.             System.out.println("true");
  163.         }else{
  164.             System.out.println("false");
  165.         }
  166.  
  167.     }
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement