Inorder Successor in BST Posted on 2018-10-15 Descriptionhttps://leetcode.com/problems/inorder-successor-in-bst/ Solution12345678910111213141516171819202122232425262728293031/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) { if (root == NULL) return NULL; unordered_map<TreeNode*, int> mapping; vector<TreeNode*> vec; int index = 0; traverseNode(mapping, vec, root); int targetIndex = mapping[p]; if (targetIndex >= vec.size() - 1) return NULL; return vec[targetIndex + 1]; } void traverseNode(unordered_map<TreeNode*, int>& mapping, vector<TreeNode*>& vec, TreeNode* root) { if (root == NULL) return; traverseNode(mapping, vec, root->left); mapping[root] = vec.size(); vec.push_back(root); traverseNode(mapping, vec, root->right); return; }}; Quick Solution123456789101112131415161718192021222324252627282930/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) { if (root == NULL) return NULL; TreeNode* traverse = root; TreeNode* ret = NULL; while (traverse) { if (p->val < traverse->val) { ret = traverse; traverse = traverse->left; }else { traverse = traverse->right; } } return ret; } };