直接输出中右左就行了的。代码其实没有把单子树翻转,要翻转也很简单,不管了,A了就行
直接模拟过程就行了!
#include<cstdio>
#include<cstring>
typedef struct node
{
int val;
struct node *left;
struct node *right;
void setVal(int v)
{
this->val = v;
left = right = NULL;
}
}Tree;
void createTree(Tree tree[],int n)
{
int val,childIndex;
for(int i=0;i<n;++i)
{
scanf("%d",&val);
tree[i].setVal(val);
}
for(int i=0;i<n;++i)
{
char ch[2];
scanf("%s",ch);
if(ch[0] == 'd')
{
scanf("%d",&childIndex);
tree[i].left = &tree[childIndex-1];
scanf("%d",&childIndex);
tree[i].right = &tree[childIndex-1];
}
else if(ch[0] == 'l')
{
scanf("%d",&childIndex);
tree[i].left = &tree[childIndex-1];
}
else if(ch[0] == 'r')
{
scanf("%d",&childIndex);
tree[i].right = &tree[childIndex-1];
}
}
}
void turnTree(Tree *tree)
{
if(tree->left != NULL && tree->right != NULL)
{
Tree *t;
t = tree->left;
tree->left = tree->right;
tree->right = t;
turnTree(tree->left);
turnTree(tree->right);
}
else if(tree->left != NULL)
{
turnTree(tree->left);
}
else if(tree->right != NULL)
{
turnTree(tree->right);
}
}
void printFirst(Tree *tree,bool first)
{
if(!first)
printf(" %d",tree->val);
else
printf("%d",tree->val);
if(tree->left != NULL)
printFirst(tree->left,false);
if(tree->right != NULL)
printFirst(tree->right,false);
}
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
if(n == 0)
{
printf("NULL\n");
continue;
}
Tree tree[1009];
createTree(tree,n);
turnTree(tree);
printFirst(tree,true);
printf("\n");
}
return 0;
}