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; }
相关文章推荐
- 03-树2. List Leaves(25)
- 03-树2. List Leaves (25)
- 03-树2. List Leaves (25) 二叉树的层序遍历
- 03-2. List Leaves (25) 树的层次遍历
- PAT 03-2. List Leaves (25)
- 03-树2. List Leaves (25)
- 03-树2. List Leaves (25) Python C
- PAT 数据结构 03-树2. List Leaves (25)
- 03-树2. List Leaves (25) Java
- PAT 03-2. List Leaves (25)
- 03-2. List Leaves (25)
- 03-2. List Leaves (PAT) - 二叉树层序遍历问题
- 03-树1. List Leaves (25)
- 【解题报告】【浙大PAT】03-树1. List Leaves (25)
- PAT 03-树1. List Leaves (25)(C)
- 03-树1. List Leaves (25)
- 03-树1. List Leaves (25)
- 03-树1. List Leaves (25)
- 03-树1. List Leaves (25)
- 03-树1. List Leaves (25)