Kame3

Проверка на валидност - [дрво]

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