题目描述
输入一串二叉树,用遍历前序打出。
输入输出格式
输入格式:
第一行为二叉树的节点数n。
后面n行,每一个字母为节点,后两个字母分别为其左右儿子。
空节点用*表示
输出格式:
前序排列的二叉树
输入输出样例
输入样例#1: 复制
6
abc
bdi
cj*
d**
i**
j**
思路:搜索
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; string s[1000]; int n,root,pos,l,r; int vis[1000]; int lchild[1000],rchild[1000]; void dfs(int now){ cout<<char(now-1+‘a‘); if(lchild[now]) dfs(lchild[now]); if(rchild[now]) dfs(rchild[now]); } int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ cin>>s[i]; pos=s[i][0]-‘a‘+1; l=0,r=0; if(s[i][1]!=‘*‘) l=s[i][1]-‘a‘+1; if(s[i][2]!=‘*‘) r=s[i][2]-‘a‘+1; lchild[pos]=l; vis[l]=1; rchild[pos]=r; vis[r]=1; } for(int i=1;i<=n;i++) if(!vis[s[i][0]-‘a‘+1]){ root=s[i][0]-‘a‘+1;break; } dfs(root); }