1102 Invert a Binary Tree
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (≤10) which is the total number of nodes in the tree – and hence the nodes are numbered from 0 to N−1. Then N lines follow, each corresponds to a node from 0 to N−1, and gives the indices of the left and right children of the node. If the child does not exist, a -
will be put at the position. Any pair of children are separated by a space.
Output Specification:
For each test case, print in the first line the level-order, and then in the second line the in-order traversal sequences of the inverted tree. There must be exactly one space between any adjacent numbers, and no extra space at the end of the line.
Sample Input:
8
1 -
- -
0 -
2 7
- -
- -
5 -
4 6
Sample Output:
3 7 2 6 4 0 5 1
6 5 7 4 3 2 0 1
#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
struct node
{
int val;
node* left;
node* right;
node* father;
}nodes[15],Node;
int n;
char pointer;
node* root;
int numIn = 0; //中序遍历计数
void level(node* root)
{
int i = 0;
queue<node> Q;
node p = *root;
Q.push(p);
while (!Q.empty())
{
node q = Q.front();
Q.pop();
printf("%d", q.val);
if (i < n - 1)
{
printf(" ");
}
else
{
printf("\n");
}
i++;
if (q.right)
{
Q.push(*(q.right));
}
if (q.left)
{
Q.push(*(q.left));
}
}
}
void in(node* root)
{
if (root->right)
{
in(root->right);
}
printf("%d", root->val);
if (numIn < n - 1)
{
printf(" ");
}
else
{
printf("\n");
}
numIn++;
if (root->left)
{
in(root->left);
}
}
int main()
{
scanf_s("%d", &n);
for (int i = 0; i < n; i++)
{
getchar();
nodes[i].val = i;
scanf_s("%c ", &pointer, sizeof(char));
if (pointer == '-')
{
nodes[i].left = NULL;
}
else
{
nodes[i].left = &nodes[pointer - '0'];
nodes[pointer - '0'].father = &nodes[i];
}
scanf_s("%c", &pointer, sizeof(char));
if (pointer == '-')
{
nodes[i].right = NULL;
}
else
{
nodes[i].right = &nodes[pointer - '0'];
nodes[pointer - '0'].father = &nodes[i];
}
}
node *p = &nodes[0];
while (p->father != NULL)
{
p = p->father;
}
root = p;
level(root);
in(root);
}