You are viewing a single comment's thread. Return to all comments →
#include <bits/stdc++.h> std::ifstream input("input.txt"); std::ofstream output("output.txt"); int n, m = 0; void swap(int &a, int &b) { int temp = a; a = b; b = temp; } void printInorder(std::vector<std::vector<int>> &indexes, int node) { if(node == -1) return; printInorder(indexes, indexes[node - 1][0]); std::cout << node << " "; printInorder(indexes, indexes[node - 1][1]); } void inorderTraversal(std::vector<std::vector<int>> &indexes, int currentLevel, int node, int k) { if (node == -1) return; bool canSwap = (currentLevel == k) || (currentLevel > 1) && (currentLevel % k == 0); if (canSwap) { swap(indexes[node-1][0], indexes[node-1][1]); } inorderTraversal(indexes, currentLevel + 1, indexes[node-1][0], k); inorderTraversal(indexes, currentLevel + 1, indexes[node-1][1], k); } void swapNodes(std::vector<std::vector<int>> indexes, std::vector<int> queries) { for (int i = 0; i < queries.size(); i++) { inorderTraversal(indexes, 1, 1, queries[i]); printInorder(indexes, 1); std::cout << "\n"; } } int main() { std::cin >> n; std::vector<std::vector<int>> node_index(n); std::vector<int> depths; int value = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < 2; j++) { std::cin >> value; node_index[i].push_back(value); } } std::cin >> m; for (int i = 0; i < m; i++) { std::cin >> value; depths.push_back(value); } swapNodes(node_index, depths); return 0; }
Seems like cookies are disabled on this browser, please enable them to open this website
Swap Nodes [Algo]
You are viewing a single comment's thread. Return to all comments →