题目太简单。知道二叉树长什么样就能做。用数组存二叉树。
#include<iostream>
using namespace std;
struct _node{
int tag;
int left;
int right;
_node(int n = 0){
tag = n;
left = -1;
right = -1;
}
_node& operator=(const _node& t){
tag = t.tag;
left = t.left;
right = t.right;
return *this;
}
};
int main()
{
int testcase = 0;
cin >> testcase;
while (testcase --){
int node_num, op_num;
cin >> node_num >> op_num;
_node *tree = new _node[node_num];
for (int i = 0; i < node_num; i ++){
int tag, left, right;
cin >> tag >> left >> right;
tree[tag].tag = tag;
tree[tag].left = left;
tree[tag].right = right;
}
for (int i = 0; i < op_num; i ++){
int op;
cin >> op;
if (op == 1){
int tag1, tag2;
int pos1, pos2;
cin >> tag1 >> tag2;
for(int j = 0; j < node_num; j ++){
if (tree[j].tag == tag1){
pos1 = j;
}
else if (tree[j].tag == tag2){
pos2 = j;
}
}
_node t = tree[pos1];
tree[pos1] = tree[pos2];
tree[pos2] = t;
}
else if (op == 2){
int ttag;
cin >> ttag;
for (int j = 0; j < node_num; j ++){
if (tree[j].tag == ttag){
while(tree[j].left != -1){
j = tree[j].left;
}
cout << tree[j].tag << endl;
break;
}
}
}
}
delete[] tree;
}
return 0;
}