53)二叉搜索树中的中序后继
class Solution {
public:
TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) {
TreeNode* res = nullptr;
TreeNode* cur = root;
while(cur){
if(cur->val > p->val){
res = cur;
cur = cur->left;
}else{
cur = cur->right;
}
}
return res;
}
};
54)所有大于等于节点的值之和
class Solution{
public:
TreeNode* convertBST(TreeNode* root){
int sum=0;
dfs(root, sum);
return root;
}
void dfs(TreeNode* node, int& sum){
if(!node) return;
dfs(node->right, sum);
sum += node->val;
node->val = sum;
dfs(node->left, sum);
}
};
55)二叉搜索树迭代器
class BSTIterator {
private:
stack<TreeNode*> stk;
TreeNode* cur;
public:
BSTIterator(TreeNode* root) {
cur = root;
}
int next() {
while(cur!=nullptr){
stk.push(cur);
cur = cur->left;
}
cur = stk.top(); stk.pop();
int ret = cur->val;
cur = cur->right;
return ret;
}
bool hasNext() {
return cur!=nullptr || !stk.empty();
}
};