输入一串二叉树,输出其前序遍历。
第一行为二叉树的节点数 n。(1≤n≤26)
后面 n 行,每一个字母为节点,后两个字母分别为其左右儿子。特别地,数据保证第一行读入的节点必为根节点。
空节点用 * 表示
二叉树的前序遍历。
6
abc
bdi
cj*
d**
i**
j**
abdicj
就是这么一道b题目
#include<bits/stdc++.h>
using namespace std;
int n,head[10000],e[10000],ne[10000],idex;
int add(int x,int y){
e[idex]=y;
ne[idex]=head[x];
head[x]=idex++;
}
bool vis[10000];
string a;
int idx;
queue<int> q;
void dfs(int x){
if(x==(int)'*'||vis[x]==true){
return;
}
q.push(x);
vis[x]=true;
dfs((int)e[ne[head[x]]]);
dfs((int)e[head[x]]);
return;
}
int main(){
int n;
cin>>n;
memset(head,-1,sizeof(head));
string x;
cin>>x;
add((int)x[0],(int)x[1]);
add((int)x[0],(int)x[2]);
for(int i=1;i<n;i++){
cin>>a;
add((int)a[0],(int)a[1]);
add((int)a[0],(int)a[2]);
}
dfs((int)x[0]);
while(!q.empty()){
int a=q.front();
q.pop();
cout<<(char)a;
}
}
我这一份代码全部RE 真的很难绷 求大佬解惑