Kame3

Збир на елементи во бинарно дрво lab7.3

Dec 25th, 2020 (edited)
1,082
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.37 KB | None | 0 0
  1. Збир на елементи во бинарно дрво Problem 3 (0 / 0)
  2.  
  3. Дадено ви е бинарно дрво. Потоа дадена ви е вредноста на некој јазол во дрвото. Испечатете го збирот на елементите во неговото лево поддрво кои се помали од него и збирот на елементите во неговото десно поддрво кои се поголеми од него.
  4.  
  5. Име на класата (Java): BinaryTreeSum.
  6.  
  7. import java.io.BufferedReader;
  8. import java.io.InputStreamReader;
  9. import java.util.StringTokenizer;
  10.  
  11.  
  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 extends Comparable<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.     public BNode<E> find(BNode<E> temp,E elem) {
  95.        
  96.         BNode<E> result = null;
  97.        
  98.         if (temp == null)
  99.             return null;
  100.         if (temp.info.equals(elem))
  101.             return temp;
  102.         if (temp.left != null)
  103.             result = find(temp.left,elem);
  104.         if (result == null)
  105.             result = find(temp.right,elem);
  106.  
  107.         return result;
  108.     }
  109.    
  110.     public int sumLeft (BNode<Integer> node, BNode<Integer> root) {
  111.        
  112.         if (node == null)
  113.             return 0;
  114.         else {
  115.             if (node.info < root.info){
  116.                 return sumLeft(node.left, root) + sumLeft(node.right, root) + node.info;
  117.             }
  118.             return sumLeft(node.left, root) + sumLeft(node.right, root);
  119.         }
  120.        
  121.     }
  122.     public int sumRight(BNode<Integer> node, BNode<Integer> root){
  123.         if(node == null)
  124.             return 0;
  125.         else {
  126.             if(node.info > root.info){
  127.                 return sumRight(node.left,root) + sumRight(node.right,root) + node.info;
  128.             }
  129.             return sumRight(node.left,root) + sumRight(node.right,root);
  130.         }
  131.     }
  132.    
  133. }
  134.  
  135.  
  136.  
  137. public class BinaryTreeSum {
  138.    
  139.  
  140.     public static void main(String[] args) throws Exception {
  141.         int i, j, k;
  142.         int index;
  143.         String action;
  144.        
  145.         String line;
  146.  
  147.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  148.         StringTokenizer st;
  149.  
  150.         int N = Integer.parseInt(br.readLine());
  151.  
  152.         BNode<Integer> nodes[] = new BNode[N];
  153.         BTree<Integer> tree = new BTree<Integer>();
  154.        
  155.         for (i=0;i<N;i++)
  156.             nodes[i] = new BNode<Integer>();
  157.        
  158.         for (i = 0; i < N; i++) {
  159.             line = br.readLine();
  160.             st = new StringTokenizer(line);
  161.             index = Integer.parseInt(st.nextToken());
  162.             nodes[index].info = Integer.parseInt(st.nextToken());
  163.             action = st.nextToken();
  164.             if (action.equals("LEFT")) {
  165.                 tree.addChildNode(nodes[Integer.parseInt(st.nextToken())], BNode.LEFT, nodes[index]);
  166.             } else if (action.equals("RIGHT")) {
  167.                 tree.addChildNode(nodes[Integer.parseInt(st.nextToken())], BNode.RIGHT, nodes[index]);    
  168.             } else {
  169.                 // this node is the root
  170.                 tree.makeRootNode(nodes[index]);
  171.             }
  172.         }
  173.  
  174.         int baranaVrednost=Integer.parseInt(br.readLine());
  175.        
  176.         br.close();
  177.        
  178.         // vasiot kod ovde
  179.         BNode<Integer> temp = tree.find(tree.root,baranaVrednost);
  180.         System.out.print(tree.sumLeft(temp.left,temp) + " ");
  181.         System.out.print(tree.sumRight(temp.right, temp));
  182.      
  183.     }
  184. }
  185.  
  186.  
  187. Sample input
  188.  
  189. 10
  190. 0 10 ROOT
  191. 1 19 LEFT 0
  192. 2 8 LEFT 1
  193. 3 7 LEFT 2
  194. 4 60 RIGHT 2
  195. 5 5 RIGHT 1
  196. 6 4 RIGHT 0
  197. 7 13 RIGHT 6
  198. 8 2 LEFT 7
  199. 9 1 RIGHT 7
  200. 10
  201.  
  202. Sample output
  203.  
  204. 20 13
  205.  
  206.  
Add Comment
Please, Sign In to add comment