Advertisement
akashtadwai

BSTIterator

Nov 8th, 2021
975
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.30 KB | None | 0 0
  1. /**
  2.  * Definition for a binary tree node.
  3.  * struct TreeNode {
  4.  *     int val;
  5.  *     TreeNode *left;
  6.  *     TreeNode *right;
  7.  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8.  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9.  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10.  * };
  11.  */
  12. class BSTIterator{
  13.   public:
  14.         BSTIterator(TreeNode* root, bool rev=false) : reverse(rev){
  15.             push(root);
  16.         }
  17.         void push(TreeNode* root){
  18.             while(root){
  19.                 s.push(root);
  20.                 root = (reverse)?root->right:root->left;
  21.             }
  22.         }
  23.         int next(){
  24.             TreeNode* tp =s.top();s.pop();
  25.              push(!reverse ? tp->right : tp->left);
  26.             return tp->val;
  27.         }
  28. private:
  29.     stack<TreeNode*>s;
  30.     bool reverse;
  31. };
  32. class Solution {
  33. public:
  34.     bool findTarget(TreeNode* root, int k) {
  35.       BSTIterator leftItr(root),rightItr(root,true);
  36.          int left = leftItr.next(), right = rightItr.next();
  37.         while(left<right){
  38.             if(left+right == k) return true;
  39.             if(left+right>k)
  40.                     right=rightItr.next();
  41.             else
  42.                 left=leftItr.next();
  43.         }
  44.         return false;
  45.     }
  46. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement