题意
给你一棵树,按照从上到下,从左到右的顺序输出所有的叶子节点
解题思路
利用队列来层次遍历树。
参考代码
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <queue>
using namespace std;
#define MAXN 15
struct Node{
int l,r;
}tree[MAXN];
bool used[MAXN];
int main(){
int n;
char l,r;
scanf("%d",&n);
memset(used,false,sizeof(used));
for (int i=0;i<n;i++){
cin>>l>>r;
if (l=='-') tree[i].l=-1;
else{
tree[i].l=l-'0';
used[l-'0']=true;
}
if (r=='-') tree[i].r=-1;
else{
tree[i].r=r-'0';
used[r-'0']=true;
}
}
int k=-1;
for (int i=0;i<n;i++)
if (used[i]==false)
k=i;
int flag=0;
queue<int> que;
que.push(k);
while (!que.empty()){
int p=que.front();
que.pop();
if (tree[p].l==tree[p].r && tree[p].r==-1){
if (flag==0){
printf("%d",p);
flag=1;
}
else
printf(" %d",p);
}
if (tree[p].l!=-1) que.push(tree[p].l);
if (tree[p].r!=-1) que.push(tree[p].r);
}
printf("\n");
return 0;
}