用数组模拟出二叉树,并采用并查集的方法来找出树根。
#include <iostream>
#include <algorithm>
#include <queue>
#define Null -1
#define pTree int
using namespace std;
struct TNode{
int lc, rc;
};
TNode node[10];
int parent[10];
pTree Create()
{
int n;
cin >> n;
for (int i = 0; i != n; ++i)
parent[i] = i;
char lc, rc;
for (int i = 0; i != n; ++i)
{
cin >> lc >> rc;
if (isdigit(lc))
{
node[i].lc = lc - '0';
parent[lc - '0'] = i;
}
else
node[i].lc = Null;
if (isdigit(rc))
{
node[i].rc = rc - '0';
parent[rc - '0'] = i;
}
else
node[i].rc = Null;
}
pTree root = Null;
for (int i = 0; i != n; ++i)
if (parent[i] == i)
{
root = i;
break;
}
return root;
}
int _count = 0;
void traversal_in_order(pTree a)
{
queue<pTree> q;
q.push(a);
while (!q.empty())
{
int a = q.front();
q.pop();
if (node[a].lc == Null && node[a].rc == Null)
{
if (_count != 0)
cout << ' ';
++_count;
cout << a;
continue;
}
if (node[a].lc != Null)
q.push(node[a].lc);
if (node[a].rc != Null)
q.push(node[a].rc);
}
}
int main(void)
{
ios::sync_with_stdio(false);
pTree tree = Create();
traversal_in_order(tree);
return 0;
}