#include <iostream>
#include <queue>
using namespace std;
#define MAXsize 10
struct Node
{
int left;
int right;
}treeinput[MAXsize];
int buildTree(struct Node tree[])
{
int N;
char l;
char r;
int root = -1;
scanf("%d",&N);
int check[N];
getchar();
for(int i = 0; i < N; i++)
{
scanf("%c %c", &l, &r);
getchar();
if(l != '-')
{
tree[i].left = l - '0';
check[tree[i].left] = 1;
}
else
{
tree[i].left = -1;
}
if(r != '-')
{
tree[i].right = r - '0';
check[tree[i].right] = 1;
}
else
{
tree[i].right = -1;
}
}
for(int i = 0; i < N; i++)
{
if (check[i] == 0)
{
root = i;
break;
}
}
return root;
}
vector<int> traverse(int root)
{
queue<int> data;
vector<int> vect;
int temp;
data.push(root);
while(!data.empty())
{
temp = data.front();
if(treeinput[temp].left == -1 && treeinput[temp].right == -1)
{
vect.push_back(temp);
}
else
{
if(treeinput[temp].left != -1)
{
data.push(treeinput[temp].left);
}
if(treeinput[temp].right != -1)
{
data.push(treeinput[temp].right);
}
}
data.pop();
}
return vect;
}
int main()
{
int tree1 = buildTree(treeinput);
vector<int> vect = traverse(tree1);
for(int i = 0; i < vect.size(); i++)
{
if(i == 0)
{
printf("%d", vect[i]);
}
else
{
printf(" %d", vect[i]);
}
}
}
https://blog.csdn.net/wanmeiwushang/article/details/52743938