From dd36e2069e811a99f5a776324b991816520c2269 Mon Sep 17 00:00:00 2001 From: eat-swap Date: Wed, 20 Apr 2022 11:05:05 +0800 Subject: [PATCH] add: 220420 [cpp] --- cpp/2204/220420.cpp | 60 +++++++++++++++++++++++++++++++++++++++++ cpp/2204/CMakeLists.txt | 2 +- 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 cpp/2204/220420.cpp diff --git a/cpp/2204/220420.cpp b/cpp/2204/220420.cpp new file mode 100644 index 0000000..a6b9ecf --- /dev/null +++ b/cpp/2204/220420.cpp @@ -0,0 +1,60 @@ +#include + +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 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 +} diff --git a/cpp/2204/CMakeLists.txt b/cpp/2204/CMakeLists.txt index 07a1feb..20c1dcc 100644 --- a/cpp/2204/CMakeLists.txt +++ b/cpp/2204/CMakeLists.txt @@ -3,4 +3,4 @@ PROJECT(2204) SET(CMAKE_CXX_STANDARD 23) -ADD_EXECUTABLE(2204 220419.cpp) +ADD_EXECUTABLE(2204 220420.cpp)