
#include <iostream>
#include <queue>
#define MAXN 10
using namespace std;
struct node
{
int id;
int lchild;
int rchild;
}T[MAXN];
int check[MAXN];
queue<int> q;
int tmp;
//从上到下,从左到右,即层序输出
void PrintT(int r){
if(r==-1) return;
q.push(r);
int flag=0;
while(!q.empty()){
tmp=q.front();
q.pop();
//若为叶子结点则输出
if((T[tmp].lchild==-1) && (T[tmp].rchild==-1)){
if(!flag){
printf("%d",T[tmp].id);
flag=1;
}
else printf(" %d",T[tmp].id);
}
if(T[tmp].lchild!=-1)q.push(T[tmp].lchild);
if(T[tmp].rchild!=-1)q.push(T[tmp].rchild);
}
return;
}
int main(){
int N;
int tmp_l,tmp_r;
int root;
scanf("%d",&N);
//读入的操作
for(int i=0;i<N;i++){
getchar();
scanf("%c %c",&tmp_l,&tmp_r);
T[i].id=i;
if(tmp_l!='-'){
T[i].lchild=tmp_l-'0';
check[T[i].lchild]=1;
}else{
T[i].lchild=-1;
}
if(tmp_r!='-'){
T[i].rchild=tmp_r-'0';
check[T[i].rchild]=1;
}else{
T[i].rchild=-1;
}
}
for(int i=0;i<N;i++){
if(check[i]==0){
root=i;
break;
}
}
PrintT(root);
return 0;
}
该程序实现了一个二叉树的数据结构,并提供了层序遍历的函数,从上到下,从左到右进行节点输出。首先读入一系列的二叉树操作,然后找到没有父节点的节点作为根节点,最后进行层序遍历并打印节点ID。程序适用于理解二叉树的遍历和构建。
6万+

被折叠的 条评论
为什么被折叠?



