Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.math.*;
- import java.security.*;
- import java.text.*;
- import java.util.*;
- import java.util.concurrent.*;
- import java.util.function.*;
- import java.util.regex.*;
- import java.util.stream.*;
- import static java.util.stream.Collectors.joining;
- import static java.util.stream.Collectors.toList;
- class Result {
- /*
- * Complete the 'swapNodes' function below.
- *
- * The function is expected to return a 2D_INTEGER_ARRAY.
- * The function accepts following parameters:
- * 1. 2D_INTEGER_ARRAY indexes
- * 2. INTEGER_ARRAY queries
- */
- public static List<List<Integer>> swapNodes(List<List<Integer>> indexes, List<Integer> queries) {
- // Write your code here
- List<List<Node>> tree = treeGenerator(indexes);
- Node root = tree.get(0).get(0);
- List<List<Integer>> result = new ArrayList<>();
- /*for (int i = 0; i < tree.size();i++) {
- for (int j = 0;j< tree.get(i).size();j++){
- System.out.print(tree.get(i).get(j).data + " ");
- }
- System.out.println("");
- }
- System.out.println(traversal(root));*/
- for (Integer i : queries) {
- swapAll(tree, i);
- result.add(traversal(root));
- }
- return result;
- }
- public static void swapAll(List<List<Node>> tree, int querie) {
- int factor = 1;
- int current;
- while (true) {
- current = querie * factor;
- if (current > tree.size()) {
- break;
- }
- for (int i = 0; i < tree.get(current-1).size(); i++) {
- swap(tree.get(current-1).get(i));
- }
- factor++;
- }
- }
- public static void swap(Node node) {
- Node temp = node.left;
- node.left = node.right;
- node.right = temp;
- }
- public static List<Integer> traversal(Node root) {
- List<Integer> result = new ArrayList<>();
- if (root.left != null) {
- result.addAll(traversal(root.left));
- }
- result.add(root.data);
- if (root.right != null) {
- result.addAll(traversal(root.right));
- }
- return result;
- }
- public static List<List<Node>> treeGenerator(List<List<Integer>> indexes) {
- List<List<Node>> result = new ArrayList<>();
- List<Node> nodes = new ArrayList<>();
- nodes.add(new Node(1));
- result.add(nodes);
- int index = 0;
- Node current;
- for (int i = 0; i < result.size(); i++) {
- nodes = new ArrayList<>();
- for (int j = 0; j < result.get(i).size(); j++) {
- try {
- int left = indexes.get(index).get(0);
- int right = indexes.get(index).get(1);
- current = result.get(i).get(j);
- if (left != -1) {
- current.left = new Node(left);
- nodes.add(current.left);
- }
- if (right != -1) {
- current.right = new Node(right);
- nodes.add(current.right);
- }
- } catch (IndexOutOfBoundsException e) {
- //System.out.println(nodes + " problem");
- break;
- }
- index++;
- }
- if (nodes.size() > 0) {
- result.add(nodes);
- }
- }
- return result;
- }
- }
- class Node {
- public int data;
- public Node left;
- public Node right;
- public int depth;
- public Node (int data) {
- this.data = data;
- left = null;
- right = null;
- }
- }
- public class Solution {
- public static void main(String[] args) throws IOException {
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
- BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
- int n = Integer.parseInt(bufferedReader.readLine().trim());
- List<List<Integer>> indexes = new ArrayList<>();
- IntStream.range(0, n).forEach(i -> {
- try {
- indexes.add(
- Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
- .map(Integer::parseInt)
- .collect(toList())
- );
- } catch (IOException ex) {
- throw new RuntimeException(ex);
- }
- });
- int queriesCount = Integer.parseInt(bufferedReader.readLine().trim());
- List<Integer> queries = IntStream.range(0, queriesCount).mapToObj(i -> {
- try {
- return bufferedReader.readLine().replaceAll("\\s+$", "");
- } catch (IOException ex) {
- throw new RuntimeException(ex);
- }
- })
- .map(String::trim)
- .map(Integer::parseInt)
- .collect(toList());
- List<List<Integer>> result = Result.swapNodes(indexes, queries);
- result.stream()
- .map(
- r -> r.stream()
- .map(Object::toString)
- .collect(joining(" "))
- )
- .map(r -> r + "\n")
- .collect(toList())
- .forEach(e -> {
- try {
- bufferedWriter.write(e);
- } catch (IOException ex) {
- throw new RuntimeException(ex);
- }
- });
- bufferedReader.close();
- bufferedWriter.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement