#include <bits/stdc++.h>
using
namespace
std;
struct
Node {
int
data;
struct
Node *left, *right;
Node(
int
data)
{
this
->data = data;
left = right = NULL;
}
};
void
Postorder(
struct
Node* node,
vector<
int
>& postorder)
{
if
(node == NULL)
return
;
Postorder(node->left, postorder);
Postorder(node->right, postorder);
postorder.push_back(node->data);
}
void
Inorder(
struct
Node* node,
vector<
int
>& inorder)
{
if
(node == NULL)
return
;
Inorder(node->left, inorder);
inorder.push_back(node->data);
Inorder(node->right, inorder);
}
void
Preorder(
struct
Node* node,
vector<
int
>& preorder)
{
if
(node == NULL)
return
;
preorder.push_back(node->data);
Preorder(node->left, preorder);
Preorder(node->right, preorder);
}
void
PrintArray(vector<
int
> median)
{
for
(
int
i = 0;
i < median.size(); i++)
cout << median[i] <<
" "
;
return
;
}
void
MedianArray(
struct
Node* node)
{
vector<
int
> median;
if
(node == NULL)
return
;
vector<
int
> preorder,
postorder,
inorder;
Postorder(node, postorder);
Inorder(node, inorder);
Preorder(node, preorder);
int
n = preorder.size();
for
(
int
i = 0; i < n; i++) {
vector<
int
> temp;
temp.push_back(postorder[i]);
temp.push_back(inorder[i]);
temp.push_back(preorder[i]);
sort(temp.begin(), temp.end());
median.push_back(temp[1]);
}
PrintArray(median);
return
;
}
int
main()
{
struct
Node* root =
new
Node(1);
root->left =
new
Node(2);
root->right =
new
Node(3);
root->left->left =
new
Node(4);
root->left->right =
new
Node(5);
MedianArray(root);
return
0;
}