Advertisement
YChalk

Swap Nodes

May 5th, 2022
674
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.73 KB | None | 0 0
  1. import java.io.*;
  2. import java.math.*;
  3. import java.security.*;
  4. import java.text.*;
  5. import java.util.*;
  6. import java.util.concurrent.*;
  7. import java.util.function.*;
  8. import java.util.regex.*;
  9. import java.util.stream.*;
  10. import static java.util.stream.Collectors.joining;
  11. import static java.util.stream.Collectors.toList;
  12.  
  13. class Result {
  14.  
  15.     /*
  16.      * Complete the 'swapNodes' function below.
  17.      *
  18.      * The function is expected to return a 2D_INTEGER_ARRAY.
  19.      * The function accepts following parameters:
  20.      *  1. 2D_INTEGER_ARRAY indexes
  21.      *  2. INTEGER_ARRAY queries
  22.      */
  23.  
  24.     public static List<List<Integer>> swapNodes(List<List<Integer>> indexes, List<Integer> queries) {
  25.     // Write your code here
  26.     List<List<Node>> tree = treeGenerator(indexes);
  27.     Node root = tree.get(0).get(0);
  28.     List<List<Integer>> result = new ArrayList<>();
  29.    
  30.     /*for (int i = 0; i < tree.size();i++) {
  31.         for (int j = 0;j< tree.get(i).size();j++){
  32.             System.out.print(tree.get(i).get(j).data + " ");
  33.         }
  34.         System.out.println("");
  35.     }
  36.    
  37.     System.out.println(traversal(root));*/
  38.    
  39.     for (Integer i : queries) {
  40.         swapAll(tree, i);
  41.         result.add(traversal(root));
  42.     }  
  43.        
  44.    
  45.     return result;
  46.  
  47.     }
  48.    
  49.     public static void swapAll(List<List<Node>> tree, int querie) {
  50.         int factor = 1;
  51.         int current;
  52.         while (true) {
  53.             current = querie * factor;
  54.             if (current > tree.size()) {
  55.                 break;
  56.             }
  57.             for (int i = 0; i < tree.get(current-1).size(); i++) {
  58.                 swap(tree.get(current-1).get(i));
  59.             }
  60.             factor++;
  61.         }
  62.     }
  63.    
  64.     public static void swap(Node node) {
  65.         Node temp = node.left;
  66.         node.left = node.right;
  67.         node.right = temp;
  68.     }
  69.    
  70.     public static List<Integer> traversal(Node root) {
  71.         List<Integer> result = new ArrayList<>();
  72.        
  73.         if (root.left != null) {
  74.             result.addAll(traversal(root.left));            
  75.         }
  76.        
  77.         result.add(root.data);
  78.        
  79.         if (root.right != null) {
  80.             result.addAll(traversal(root.right));
  81.         }
  82.        
  83.         return result;
  84.     }
  85.    
  86.     public static List<List<Node>> treeGenerator(List<List<Integer>> indexes) {
  87.         List<List<Node>> result = new ArrayList<>();
  88.         List<Node> nodes = new ArrayList<>();
  89.         nodes.add(new Node(1));
  90.         result.add(nodes);
  91.        
  92.         int index = 0;
  93.         Node current;
  94.        
  95.         for (int i = 0; i < result.size(); i++) {
  96.             nodes = new ArrayList<>();
  97.             for (int j = 0; j < result.get(i).size(); j++) {
  98.                 try {
  99.                     int left = indexes.get(index).get(0);
  100.                     int right = indexes.get(index).get(1);
  101.                     current = result.get(i).get(j);
  102.                     if (left != -1) {
  103.                        current.left = new Node(left);
  104.                         nodes.add(current.left);
  105.                     }
  106.                     if (right != -1) {
  107.                        current.right = new Node(right);
  108.                         nodes.add(current.right);
  109.                     }
  110.                 } catch (IndexOutOfBoundsException e) {
  111.                     //System.out.println(nodes + " problem");
  112.                     break;
  113.                 }
  114.                 index++;
  115.             }
  116.             if (nodes.size() > 0) {
  117.                 result.add(nodes);
  118.             }
  119.         }
  120.        
  121.        
  122.         return result;
  123.     }
  124.  
  125. }
  126.  
  127. class Node {
  128.     public int data;
  129.     public Node left;
  130.     public Node right;
  131.     public int depth;
  132.    
  133.     public Node (int data) {
  134.         this.data = data;
  135.         left = null;
  136.         right = null;
  137.     }
  138. }
  139.  
  140. public class Solution {
  141.     public static void main(String[] args) throws IOException {
  142.         BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
  143.         BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
  144.  
  145.         int n = Integer.parseInt(bufferedReader.readLine().trim());
  146.  
  147.         List<List<Integer>> indexes = new ArrayList<>();
  148.  
  149.         IntStream.range(0, n).forEach(i -> {
  150.             try {
  151.                 indexes.add(
  152.                     Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
  153.                         .map(Integer::parseInt)
  154.                         .collect(toList())
  155.                 );
  156.             } catch (IOException ex) {
  157.                 throw new RuntimeException(ex);
  158.             }
  159.         });
  160.  
  161.         int queriesCount = Integer.parseInt(bufferedReader.readLine().trim());
  162.  
  163.         List<Integer> queries = IntStream.range(0, queriesCount).mapToObj(i -> {
  164.             try {
  165.                 return bufferedReader.readLine().replaceAll("\\s+$", "");
  166.             } catch (IOException ex) {
  167.                 throw new RuntimeException(ex);
  168.             }
  169.         })
  170.             .map(String::trim)
  171.             .map(Integer::parseInt)
  172.             .collect(toList());
  173.  
  174.         List<List<Integer>> result = Result.swapNodes(indexes, queries);
  175.  
  176.         result.stream()
  177.             .map(
  178.                 r -> r.stream()
  179.                     .map(Object::toString)
  180.                     .collect(joining(" "))
  181.             )
  182.             .map(r -> r + "\n")
  183.             .collect(toList())
  184.             .forEach(e -> {
  185.                 try {
  186.                     bufferedWriter.write(e);
  187.                 } catch (IOException ex) {
  188.                     throw new RuntimeException(ex);
  189.                 }
  190.             });
  191.  
  192.         bufferedReader.close();
  193.         bufferedWriter.close();
  194.     }
  195. }
  196.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement