LIST LEAVE

写了一下午结果还得靠学别人才会写,原来要用队列知识,别人建队列的方法好麻烦我直接用一个数组代替了嘻嘻嘻

#include <stdio.h>
struct Tree
{
    int left,right;
}T[99];
int F=1;
int RES[99];
    int rear=0;
    int head=1;
    int QUEUE[99];
    
int BT(int N,struct Tree T[])
{int i,out;
 char cl,cr;
 int Check[N];
 out=0;
 for(i=0;i<N;i++)
 {
     Check[i]=0;
 }
    for(i=0;i<N;i++)
    {   T[i].left=-1;
        T[i].right=-1;
        scanf("%c %c\n",&cl,&cr);
        if(cl!='-')
        {Check[cl-'0']=1;
            T[i].left=cl-'0';
        }
        if(cr!='-')
        {Check[cr-'0']=1;
            T[i].right=cr-'0';
        }
    }
    for(i=0;i<N;i++)
    {
        if(Check[i]==0)
        out=i;
    }
    return out;
}

int enqueue(int x)
{
    rear++;
    QUEUE[rear]=x;
}

int chuqueue()
{int x;
    x=head;
    head++;
    RES[F++]=QUEUE[x];
    return QUEUE[x];
}

int kongma()
{
    if(head>rear)
    return 1;
    else
    return 0;
}

int PAIXU(int G)
{int x;
    if(T[G].left!=-1)
    {enqueue(T[G].left);
    }
    if(T[G].right!=-1)
    {enqueue(T[G].right);
    }
    while(kongma()==0)
    {
        x=chuqueue();
    if(T[x].left!=-1)
    {enqueue(T[x].left);
    }
    if(T[x].right!=-1)
    {enqueue(T[x].right);
    }
    }
    
}

int main(void) {
int N,G;
int i,x;
scanf("%d\n",&N);
if(N==0)
{printf("0");
return 0;}
G=BT(N,T);
if(N==1)
{printf("0");
return 0;}
for(i=0;i<99;i++)
RES[i]=-1;
RES[0]=G;
PAIXU(G);
for(i=0;RES[i]!=-1;i++)
{x=RES[i];
    if((T[x].left==-1)&&(T[x].right==-1))
    {
        if(RES[i+1]==-1)
        printf("%d",RES[i]);
        else
        printf("%d ",RES[i]);
    }
}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值