add: 220420 [cpp]

This commit is contained in:
eat-swap 2022-04-20 11:05:05 +08:00
parent 49a63927cc
commit dd36e2069e
No known key found for this signature in database
GPG Key ID: 8C089CB1A2B7544F
2 changed files with 61 additions and 1 deletions

60
cpp/2204/220420.cpp Normal file
View File

@ -0,0 +1,60 @@
#include <stack>
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
explicit TreeNode(int x = 0, TreeNode* l = nullptr, TreeNode* r = nullptr) : val(x), left(l), right(r) {}
};
/**
* 173. Binary Search Tree Iterator
* Implement the BSTIterator class that represents an iterator over the in-order traversal of a binary search tree (BST):
* BSTIterator(TreeNode root) Initializes an object of the BSTIterator class. The root of the BST is given as part of the constructor. The pointer should be initialized to a non-existent number smaller than any element in the BST.
* boolean hasNext() Returns true if there exists a number in the traversal to the right of the pointer, otherwise returns false.
* int next() Moves the pointer to the right, then returns the number at the pointer.
* Notice that by initializing the pointer to a non-existent smallest number, the first call to next() will return the smallest element in the BST.
* You may assume that next() calls will always be valid. That is, there will be at least a next number in the in-order traversal when next() is called.
*/
class BSTIterator {
private:
std::stack<const TreeNode*> s;
public:
explicit BSTIterator(const TreeNode* root) {
for (; root; root = root->left)
s.push(root);
}
int next() {
if (s.empty())
return -1;
const TreeNode* ret = s.top();
s.pop();
if (ret->right)
for (const TreeNode* ptr = ret->right; ptr; ptr = ptr->left)
s.push(ptr);
return ret->val;
}
bool hasNext() {
return !s.empty();
}
};
int main() {
int x;
bool b;
BSTIterator bSTIterator = BSTIterator(new TreeNode(7, new TreeNode(3), new TreeNode(15, new TreeNode(9), new TreeNode(20))));
x = bSTIterator.next(); // return 3
x = bSTIterator.next(); // return 7
b = bSTIterator.hasNext(); // return True
x = bSTIterator.next(); // return 9
b = bSTIterator.hasNext(); // return True
x = bSTIterator.next(); // return 15
b = bSTIterator.hasNext(); // return True
x = bSTIterator.next(); // return 20
b = bSTIterator.hasNext(); // return False
}

View File

@ -3,4 +3,4 @@ PROJECT(2204)
SET(CMAKE_CXX_STANDARD 23) SET(CMAKE_CXX_STANDARD 23)
ADD_EXECUTABLE(2204 220419.cpp) ADD_EXECUTABLE(2204 220420.cpp)