PAT甲题题解-1130. Infix Expression (25)-中序遍历

时间:2021-09-14 08:33:51

博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~
http://www.cnblogs.com/chenxiwenruo/p/6789828.html
特别不喜欢那些随便转载别人的原创文章又不给出链接的
所以不准偷偷复制博主的博客噢~~

水,中序遍历输出即可
注意除根节点、叶子节点外,都需要有括号括起来

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <vector>
#include <cstring>
#include <queue>
using namespace std;
const int maxn=;
int n;
struct Node{
char str[];
int left;
int right;
}node[maxn]; void dfs(int u,int root){
if(node[u].left==- && node[u].right==-){
printf("%s",node[u].str);
return;
}
if(u!=root)
printf("(");
if(node[u].left!=-)
dfs(node[u].left,root);
printf("%s",node[u].str);
if(node[u].right!=-)
dfs(node[u].right,root);
if(u!=root)
printf(")");
}
int main()
{
char s[];
int l,r;
int vis[maxn];
memset(vis,,sizeof(vis));
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%s %d %d",node[i].str,&l,&r);
node[i].left=l;
node[i].right=r;
vis[l]=vis[r]=;
}
int root;
for(int i=;i<=n;i++){
if(!vis[i]){
root=i;
break;
}
}
dfs(root,root);
return ;
}