#include <string.h>
#include <stdio.h>
#include <vector>
#include <queue>
#include <algorithm>
#include <map>
#include <string>
#include <iostream>
#include <math.h>
using namespace std;
struct node
{
int data;
int lchild;
int rchild;
node()
{
lchild=-1;
rchild=-1;
}
}A[110];
int N;
int change(char a[])
{
int len=strlen(a);
int result=0;
for(int i=0;i<len;i++)
{
result=result*10+a[i]-'0';
}
return result;
}
bool harsh[110]={false};
int num=0;
void levelorder(int root)
{
queue<int> q;
q.push(root);
while(!q.empty())
{
int top=q.front();
q.pop();
if(num!=0)printf(" ");
printf("%d",A[top].data);
num++;
if(A[top].rchild!=-1)
{
q.push(A[top].rchild);
}
if(A[top].lchild!=-1)
{
q.push(A[top].lchild);
}
}
printf("\n");
}
void inorder(int root)
{
if(root==-1)return;
inorder(A[root].rchild);
if(num!=0)printf(" ");
printf("%d",A[root].data);
num++;
inorder(A[root].lchild);
}
int main()
{
scanf("%d",&N);
char l[10],r[10];
for(int i=0;i<N;i++)
{
A[i].data=i;
scanf("%s%s",&l,&r);
if(l[0]!='-')
{
int x=change(l);
A[i].lchild=x;
harsh[x]=true;
}
if(r[0]!='-')
{
int x=change(r);
A[i].rchild=x;
harsh[x]=true;
}
}
int root=-1;
for(int i=0;i<N;i++)
{
if(harsh[i]==false)
{
root=i;
break;
}
}
levelorder(root);
num=0;
inorder(root);
printf("\n");
return 0;
}
PAT甲1102 Invert a Binary Tree(25 分)
最新推荐文章于 2020-06-07 15:48:19 发布