POJ 1785 笛卡尔树(详解)

POJ 1785 笛卡尔树(详解)_第1张图片
结合代码看相信看的更懂
AC代码

/*

笛卡尔树
    二叉堆+二叉排序树

*/
#include
#include
#include
#include
#include
using namespace std;

const int maxn=0x7fffffff;

struct node
{
    char s[100];
    int l,r,fa,idx;
    friend bool operator<(const node& a,const node& b)
        return strcmp(a.s,b.s)<0;
}p[50005];

void myinsert(int n)
{
    for(int i=1;i<=n;i++){
        int j=i-1;
        while(p[j].idxvoid dfs(int x)
{
    if(x==0)
        return ;
    printf("(");
    dfs(p[x].l);
    printf("%s/%d",p[x].s,p[x].idx);
    dfs(p[x].r);
    printf(")");
}

int main()
{
    int n;
    while(scanf("%d",&n),n){
        for(int i=1;i<=n;i++){
            scanf(" %[^/]/%d",p[i].s,&p[i].idx);
            p[i].l=p[i].r=p[i].fa=0;
        }
        p[0].l=p[0].r=p[0].fa=0;
        p[0].idx=maxn;
        sort(p+1,p+1+n);
        myinsert(n);
        dfs(p[0].r);
        puts("");
    }
    return 0;
}

你可能感兴趣的:(数据结构)