/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Successor {
int helper(TreeNode* root, int p, bool &sign){
if(!root) return -1;
int left = helper(root->left, p, sign);
if(left != -1) {
return left;
}
if(sign){
return root->val;
}
if(root->val == p){
sign = true;
}
return helper(root->right, p, sign);
}
public:
int findSucc(TreeNode* root, int p) {
// write code here
bool sign = false;
return helper(root, p, sign);
}
};