#include <bits/stdc++.h>
using
namespace
std;
struct
TreeNode {
int
val;
TreeNode* left;
TreeNode* right;
TreeNode* parent;
TreeNode(
int
x)
: val(x), left(NULL), right(NULL), parent(NULL)
{
}
};
void
findPath(TreeNode* root)
{
TreeNode* minNode = root;
TreeNode* maxNode = root;
queue<TreeNode*> q;
q.push(root);
while
(!q.empty()) {
TreeNode* node = q.front();
q.pop();
if
(node->val < minNode->val)
minNode = node;
if
(node->val > maxNode->val)
maxNode = node;
if
(node->left) {
node->left->parent = node;
q.push(node->left);
}
if
(node->right) {
node->right->parent = node;
q.push(node->right);
}
}
while
(minNode->parent != nullptr
&& minNode->parent->val > maxNode->val) {
minNode = minNode->parent;
}
while
(maxNode->parent != nullptr
&& maxNode->parent->val < minNode->val) {
maxNode = maxNode->parent;
}
cout << minNode->val <<
" "
;
set<
int
> path;
while
(maxNode != nullptr) {
path.insert(maxNode->val);
maxNode = maxNode->parent;
}
for
(
auto
itr = path.begin(); itr != path.end();
itr++) {
cout << *itr <<
" "
;
}
cout << endl;
}
int
main()
{
TreeNode* root =
new
TreeNode(2);
root->left =
new
TreeNode(1);
root->right =
new
TreeNode(6);
root->left->left =
new
TreeNode(4);
root->left->right =
new
TreeNode(21);
root->right->right =
new
TreeNode(26);
root->left->left->left =
new
TreeNode(5);
root->left->right->right =
new
TreeNode(7);
root->parent = NULL;
findPath(root);
return
0;
}