/* 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); } };