Advertisement
Guest User

Untitled

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