您的位置:首页 > 编程语言 > C语言/C++

03-2. List Leaves (25)--c语言实现

2015-02-12 22:55 435 查看
<pre name="code" class="cpp">#include<stdio.h>
#define MAXNODE 100
typedef struct{
int index;
char lchild;
char rchild;
}TNode;

int main()
{
int num;
int c;
scanf("%d",&num);
TNode a[num]; //存放输入的节点左右孩子
for(int i=0;i<num;i++) //将输入结点放入数组
{
while((c=getchar())==' '||c=='\t'||c=='\n');
a[i].lchild=c;
while((c=getchar())==' '||c=='\t'||c=='\n');
a[i].rchild=c;
a[i].index=i;
}
int findroot[num]; //用来寻找root
for(int i=0;i<num;i++) //初始化,默认为-1
findroot[i]=-1;
for(int i=0;i<num;i++)//遍历数组左右孩子,没出现的数字就是root代表的结点,即它不是其它结点的孩子
{
if('0'<=a[i].lchild&&a[i].lchild<='9')
findroot[a[i].lchild-'0']=1;  //(1用来标记出现过的)
if('0'<=a[i].rchild&&a[i].rchild<='9')
findroot[a[i].rchild-'0']=1;
}
int i,root;
for(i=0;findroot[i]!=-1;i++) //-1代表上述遍历未找到的结点
;
root=i;

TNode node;
TNode queue[MAXNODE];
int front=0,rear=-1;
queue[++rear]=a[root];
int index[num];
i=0;
while(rear-front>=0) //层次遍历
{
node=queue[front++];
if(node.lchild=='-'&&node.rchild=='-')
index[i++]=node.index; //按顺序记录无孩子的结点
if(node.lchild!='-')
queue[++rear]=a[node.lchild-'0'];
if(node.rchild!='-')
queue[++rear]=a[node.rchild-'0'];

}
for(int j=0;j<i;j++)  //输出
{
printf("%d",index[j]);
if(j<i-1)
putchar(' ');
else
break;
}

return 0;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: