博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~
http://www.cnblogs.com/chenxiwenruo/p/6789828.html
特别不喜欢那些随便转载别人的原创文章又不给出链接的
所以不准偷偷复制博主的博客噢~~
水,中序遍历输出即可
注意除根节点、叶子节点外,都需要有括号括起来
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include <iostream> #include <cstdio> #include <algorithm> #include <string> #include <vector> #include <cstring> #include <queue> using namespace std; const int maxn=25; int n; struct Node{ char str[15]; int left; int right; }node[maxn]; void dfs(int u,int root){ if(node[u].left==-1 && node[u].right==-1){ printf("%s",node[u].str); return; } if(u!=root) printf("("); if(node[u].left!=-1) dfs(node[u].left,root); printf("%s",node[u].str); if(node[u].right!=-1) dfs(node[u].right,root); if(u!=root) printf(")"); } int main() { char s[15]; int l,r; int vis[maxn]; memset(vis,0,sizeof(vis)); scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%s %d %d",node[i].str,&l,&r); node[i].left=l; node[i].right=r; vis[l]=vis[r]=1; } int root; for(int i=1;i<=n;i++){ if(!vis[i]){ root=i; break; } } dfs(root,root); return 0; }