Advertisement
mvCode

BinaryTreeSum , Zbir na elementi vo binarno drvo AIPS

Dec 12th, 2019
340
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.75 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.util.StringTokenizer;
  4.  
  5. class BNode<E> {
  6.  
  7.     public E info;
  8.     public BNode<E> left;
  9.     public BNode<E> right;
  10.  
  11.     static int LEFT = 1;
  12.     static int RIGHT = 2;
  13.  
  14.     public BNode(E info) {
  15.         this.info = info;
  16.         left = null;
  17.         right = null;
  18.     }
  19.  
  20.     public BNode() {
  21.         this.info = null;
  22.         left = null;
  23.         right = null;
  24.     }
  25.  
  26.     public BNode(E info, BNode<E> left, BNode<E> right) {
  27.         this.info = info;
  28.         this.left = left;
  29.         this.right = right;
  30.     }
  31.  
  32. }
  33.  
  34. class BTree<E extends Comparable<E>> {
  35.  
  36.     public BNode<E> root;
  37.  
  38.     public BTree() {
  39.         root = null;
  40.     }
  41.  
  42.     public BTree(E info) {
  43.         root = new BNode<E>(info);
  44.     }
  45.  
  46.     public void makeRoot(E elem) {
  47.         root = new BNode(elem);
  48.     }
  49.  
  50.     public void makeRootNode(BNode<E> node) {
  51.         root = node;
  52.     }
  53.  
  54.     public BNode<E> addChild(BNode<E> node, int where, E elem) {
  55.  
  56.         BNode<E> tmp = new BNode<E>(elem);
  57.  
  58.         if (where == BNode.LEFT) {
  59.             if (node.left != null)  // veke postoi element
  60.                 return null;
  61.             node.left = tmp;
  62.         } else {
  63.             if (node.right != null) // veke postoi element
  64.                 return null;
  65.             node.right = tmp;
  66.         }
  67.  
  68.         return tmp;
  69.     }
  70.  
  71.     public BNode<E> addChildNode(BNode<E> node, int where, BNode<E> tmp) {
  72.  
  73.         if (where == BNode.LEFT) {
  74.             if (node.left != null)  // veke postoi element
  75.                 return null;
  76.             node.left = tmp;
  77.         } else {
  78.             if (node.right != null) // veke postoi element
  79.                 return null;
  80.             node.right = tmp;
  81.         }
  82.  
  83.         return tmp;
  84.     }
  85.  
  86. }
  87.  
  88. public class BinaryTreeSum {
  89.  
  90.  
  91.     public static void main(String[] args) throws Exception {
  92.         int i, j, k;
  93.         int index;
  94.         String action;
  95.  
  96.         String line;
  97.  
  98.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  99.         StringTokenizer st;
  100.  
  101.         int N = Integer.parseInt(br.readLine());
  102.  
  103.         BNode<Integer> nodes[] = new BNode[N];
  104.         BTree<Integer> tree = new BTree<Integer>();
  105.  
  106.         for (i=0; i<N; i++)
  107.             nodes[i] = new BNode<Integer>();
  108.  
  109.         for (i = 0; i < N; i++) {
  110.             line = br.readLine();
  111.             st = new StringTokenizer(line);
  112.             index = Integer.parseInt(st.nextToken());
  113.             nodes[index].info = Integer.parseInt(st.nextToken());
  114.             action = st.nextToken();
  115.             if (action.equals("LEFT")) {
  116.                 tree.addChildNode(nodes[Integer.parseInt(st.nextToken())], BNode.LEFT, nodes[index]);
  117.             } else if (action.equals("RIGHT")) {
  118.                 tree.addChildNode(nodes[Integer.parseInt(st.nextToken())], BNode.RIGHT, nodes[index]);
  119.             } else {
  120.                 // this node is the root
  121.                 tree.makeRootNode(nodes[index]);
  122.             }
  123.         }
  124.  
  125.         int baranaVrednost=Integer.parseInt(br.readLine());
  126.  
  127.         br.close();
  128.  
  129.         // vasiot kod
  130.  
  131.         //System.out.println( findNode(tree.root, baranaVrednost).info.toString() );
  132.         BNode<Integer> foundNode = findNode(tree.root, baranaVrednost);
  133.  
  134.         System.out.print( lesserNodesSum( foundNode.left, foundNode.info ) + " ");
  135.         System.out.print( greaterNodesSum( foundNode.right, foundNode.info) );
  136.     }
  137.  
  138.     static  BNode<Integer> findNode( BNode<Integer> pok, int value ) {
  139.  
  140.         if ( pok == null ) // ako stigne do list vrati null
  141.             return null;
  142.  
  143.         if( pok.info.equals(value) ) // ako ja najde vr zemi go
  144.             return pok;
  145.  
  146.         return findNode( pok.left, value ) != null ? findNode( pok.left, value ) : findNode( pok.right, value ); // ili prviot, ili vtoriot , ili i dvara se null zatoa sto ne go sodrzat el
  147.  
  148.     }
  149.  
  150.     static  int greaterNodesSum( BNode<Integer> pok, int value) {
  151.  
  152.         if ( pok == null ) // ako stigne do list vrati null
  153.             return 0;
  154.  
  155.         if( pok.info > value ) // ako najde pogolema vr od baranata
  156.             return pok.info + greaterNodesSum( pok.left, value ) + greaterNodesSum( pok.right, value );;
  157.  
  158.         return greaterNodesSum( pok.left, value ) + greaterNodesSum( pok.right, value );
  159.  
  160.     }
  161.  
  162.     static  int lesserNodesSum( BNode<Integer> pok, int value) {
  163.  
  164.         if ( pok == null ) // ako stigne do list vrati null
  165.             return 0;
  166.  
  167.         if( pok.info < value ) // ako najde pomala vr od baranata
  168.             return pok.info + lesserNodesSum( pok.left, value ) + lesserNodesSum( pok.right, value );
  169.  
  170.         return lesserNodesSum( pok.left, value ) + lesserNodesSum( pok.right, value );
  171.  
  172.     }
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement