1102. Invert a Binary Tree

Direct Link

#include <bits/stdc++.h>
using namespace std;

// invert binary tree
void inverseTree(vector<int> treeNode[], int root) {
    swap(treeNode[root][0], treeNode[root][1]);
    if (treeNode[root][0] != -1) inverseTree(treeNode, treeNode[root][0]);
    if (treeNode[root][1] != -1) inverseTree(treeNode, treeNode[root][1]);
}

// compute level order of binary tree
void levelOrder(const vector<int> treeNode[], int root, vector<int> &ret) {
    queue<int> q;
    q.push(root);
    while (!q.empty()) {
        int node = q.front(); q.pop();
        ret.push_back(node);
        if (treeNode[node][0] != -1) q.push(treeNode[node][0]);
        if (treeNode[node][1] != -1) q.push(treeNode[node][1]);
    }
}

// compute inorder of binary tree
void inOrder(const vector<int> treeNode[], int root, vector<int> &ret) {
    if (root == -1) return;
    inOrder(treeNode, treeNode[root][0], ret);
    ret.push_back(root);
    inOrder(treeNode, treeNode[root][1], ret);
}

// print the answer
void printAnswer(const vector<int> &result) {
    if (!result.empty()) {
        printf("%d", result[0]);
        for (int i = 1; i < result.size(); i++) printf(" %d", result[i]);
    }
    printf("\n");
}

int main() {
    int n;
    char a, b;
    scanf("%d", &n);
    vector<int> treeNode[10]; // tree structure, it seems like adjacent table
    int root = n*(n-1)/2; // math method to compute root
    for (int i = 0; i < n; i++) {
        getchar();
        scanf("%c %c", &a, &b);
        treeNode[i].push_back(a=='-' ? -1 : (root-=a-'0',a-'0'));
        treeNode[i].push_back(b=='-' ? -1 : (root-=b-'0',b-'0'));
    }
    inverseTree(treeNode, root);
    vector<int> levelOrderResult, inOrderResult;
    levelOrder(treeNode, root, levelOrderResult);
    inOrder(treeNode, root, inOrderResult);
    printAnswer(levelOrderResult);
    printAnswer(inOrderResult);
    return 0;
}