#include <bits/stdc++.h>
using
namespace
std;
struct
TreeNode {
int
val;
TreeNode* left;
TreeNode* right;
TreeNode(
int
x)
: val(x), left(NULL), right(NULL)
{
}
};
void
inorderTraversal(TreeNode* root, vector<
int
>& values)
{
if
(!root)
return
;
inorderTraversal(root->left, values);
values.push_back(root->val);
inorderTraversal(root->right, values);
}
int
getNextGreaterElement(TreeNode* root,
int
target)
{
vector<
int
> values;
inorderTraversal(root, values);
auto
it
= find(values.begin(), values.end(), target);
if
(it == values.end())
return
-1;
auto
dist = distance(values.begin(), it);
for
(
int
i = dist + 1; i < values.size(); i++) {
if
(values[i] > target) {
return
values[i];
}
}
return
-1;
}
int
main()
{
TreeNode* root =
new
TreeNode(5);
root->left =
new
TreeNode(3);
root->right =
new
TreeNode(7);
root->left->left =
new
TreeNode(2);
root->left->right =
new
TreeNode(4);
root->right->left =
new
TreeNode(6);
root->right->right =
new
TreeNode(8);
int
target = 4;
int
nextGreaterElement
= getNextGreaterElement(root, target);
cout <<
"The next greater element of "
<< target
<<
" is "
<< nextGreaterElement << endl;
return
0;
}