洛谷 P1305 新二叉樹
阿新 • • 發佈:2017-11-19
16px ora roo names toolbar class ++ bar void
P1305 新二叉樹
題目描述
輸入一串二叉樹,用遍歷前序打出。
輸入輸出格式
輸入格式:
第一行為二叉樹的節點數n。
後面n行,每一個字母為節點,後兩個字母分別為其左右兒子。
空節點用*表示
輸出格式:
前序排列的二叉樹
輸入輸出樣例
輸入樣例#1: 復制6
abc
bdi
cj*
d**
i**
j**
思路:搜索
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> usingnamespace 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); }
洛谷 P1305 新二叉樹