先是找到根节点在哪,然后层序遍历;
#include<iostream>
#define MaxTree 10
#define Tree char
#include<vector>
#include<queue>
using namespace std;
struct TreeNode
{
int index;
Tree Left;
Tree Right;
int leftnumber;
int rightnumber;
}T1[MaxTree];
queue<TreeNode>q;
int main()
{
int n;
cin>>n;
int check[10];
for(int i=0;i<n;i++)
check[i]=0;
for(int i=0;i<n;i++)
{
T1[i].index=i;
cin>>T1[i].Left>>T1[i].Right;
if(T1[i].Left!='-')
{
T1[i].leftnumber=T1[i].Left-'0';
check[T1[i].leftnumber]=1;
}
else
T1[i].leftnumber=-1;
if(T1[i].Right!='-')
{
T1[i].rightnumber=T1[i].Right-'0';
check[T1[i].rightnumber]=1;
}
else
T1[i].rightnumber=-1;
}
int Root;
for(int i=0;i<n;i++)//找根结点
if(!check[i])
{
Root=i;
break;
}
//cout<<Root<<endl;
q.push(T1[Root]);
int count = 0;
//cout<<"hello world"<<endl;
while(!q.empty())//层序遍历
{
TreeNode heel =q.front();
q.pop();
if(heel.leftnumber!=-1)
{
q.push(T1[heel.leftnumber]);
}
if(heel.rightnumber!=-1)
{
q.push(T1[heel.rightnumber]);
}
if(heel.leftnumber==-1&&heel.rightnumber==-1)
{
if(count == 0)
{
cout<<heel.index;
count=1;
}
else
cout<<" "<<heel.index;
}
}
return 0;
}