#include <bits/stdc++.h>
using
namespace
std;
struct
Node {
int
data;
int
order;
struct
Node* left;
struct
Node* right;
};
struct
Node* newNode(
int
data,
int
order)
{
struct
Node* node =
new
Node;
node->data = data;
node->order = order;
node->left = NULL;
node->right = NULL;
return
(node);
}
void
Postorder(
struct
Node* node, vector<pair<
int
,
int
> >& v)
{
if
(node == NULL)
return
;
Postorder(node->left, v);
Postorder(node->right, v);
if
(node->right == NULL && node->left == NULL) {
node->order = 1;
v.push_back(make_pair(node->order, node->data));
}
else
{
node->order = max((node->left)->order, (node->right)->order) + 1;
v.push_back(make_pair(node->order, node->data));
}
}
void
printLeafNodes(
int
n, vector<pair<
int
,
int
> >& v)
{
sort(v.begin(), v.end());
for
(
int
i = 0; i < n; i++) {
if
(v[i].first == v[i + 1].first)
cout << v[i].second <<
" "
;
else
cout << v[i].second <<
"\n"
;
}
}
int
main()
{
struct
Node* root = newNode(8, 0);
root->left = newNode(3, 0);
root->right = newNode(10, 0);
root->left->left = newNode(1, 0);
root->left->right = newNode(6, 0);
root->right->left = newNode(14, 0);
root->right->right = newNode(4, 0);
root->left->left->left = newNode(7, 0);
root->left->left->right = newNode(13, 0);
int
n = 9;
vector<pair<
int
,
int
> > v;
Postorder(root, v);
printLeafNodes(n, v);
return
0;
}