树的存储与前序遍历

· · 算法·理论

有bug,抽空调

//by wangbinfeng
#include<iostream>
#include<cstdio>
using namespace std;
struct node{
    int left,right,father;
    bool have;
    node(){
        left=-1;
        right=-1;
        father=-1;
        have=false;
    }
}dat[30];
int n,root;
char l,r,f,c;
void dfs(int now){
    cout<<char(now+'a');
    if(dat[now].left!=-1)dfs(dat[now].left);
    if(dat[now].right!=-1)dfs(dat[now].right);
}
int main(){
    cin>>n;
    for(int i=0;i<n;i++){
        c=getchar();
        while(c<'a'||c>'z')c=getchar();
        f=c;
        l=getchar();
        r=getchar();
        dat[f-'a'].left=(l=='*' ? -1 : l-'a');
        dat[f-'a'].right=(r=='*' ? -1 : r-'a');
        if(l!='*')dat[l-'a'].father=f-'a';
        if(r!='*')dat[r-'a'].father=f-'a';
        dat[i].have=true;
    }
    for(int i=0;i<26;i++){
        if(dat[i].father==-1&&dat[i].have==true)root=i;
    }
    root=0;
    dfs(root);
}