原题:1102. Invert a Binary Tree (25)
解题思路;
输入是把左右子树全换一遍,再按正常层序和中序遍历输出即可。
代码如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn = 10 ;
int Tree[maxn][2];
int p[maxn];
void levelOrder(int root, int& first)
{
queue<int> q;
q.push(root);
while(!q.empty())
{
int top = q.front(); q.pop();
if(first) {printf("%d", top); first = 0;}
else printf(" %d", top);
if(Tree[top][0] != -1) q.push(Tree[top][0]);
if(Tree[top][1] != -1) q.push(Tree[top][1]);
}
}
void inOrder(int root, int& first)
{
if(Tree[root][0] != -1) inOrder(Tree[root][0], first);
if(first) {printf("%d", root); first = 0;}
else printf(" %d", root);
if(Tree[root][1] != -1) inOrder(Tree[root][1], first);
}
int main()
{
int n;
while(scanf("%d", &n) == 1)
{
memset(p, -1, sizeof(p));
for(int i = 0; i < n; i++)
{
char s[5];
scanf("%s", s);
if(s[0] == '-') Tree[i][1] = -1;
else
{
Tree[i][1] = s[0] - '0';
p[s[0]-'0'] = i;
}
scanf("%s", s);
if(s[0] == '-') Tree[i][0] = -1;
else
{
Tree[i][0] = s[0] - '0';
p[s[0]-'0'] = i;
}
}
int root = -1;
for(int i = 0; i < n; i++) if(p[i] == -1) root = i;
int first = 1;
levelOrder(root, first); printf("\n");
first = 1;
inOrder(root, first); printf("\n");
}
return 0;
}