分析:这是一道算是比较基础的数据结构体。建树+搜索。
思路:建立一个结构体数组来存储每个结点的值还有它左右孩子的下标。然后输入的时候用一个pre数组来存储各节点之间的关系,用来找到这颗树的根节点。然后就是BFS搜索,如果搜到某个结点两个孩子值都为-1就输出就行,代码如下:
#include<bits/stdc++.h>
using namespace std;
struct node{
int id,left,right;
}tree[11],Top;
int read(node t[])
{
int n,pre[11];
cin>>n;
for(int i=0;i<n;i++)
{
t[i].id=i;
char l,r;
cin>>l>>r;
if(l!='-') {t[i].left=l-'0';pre[l-'0']=1;}
else t[i].left=-1;
if(r!='-') {t[i].right=r-'0';pre[r-'0']=1;}
else t[i].right=-1;
}
for(int i=0;i<n;i++)
if(!pre[i]) return i;
return -1;
}
int main()
{
int root=read(tree);
if(root==-1) {cout<<0; return 0;}
queue<node>q;
q.push(tree[root]);
while(!q.empty())
{
Top=q.front();
q.pop();
if(Top.left==-1&&Top.right==-1) {cout<<Top.id<<" ";continue;}
else
{
if(Top.left!=-1) q.push(tree[Top.left]);
if(Top.right!=-1) q.push(tree[Top.right]);
}
}
}