add: 220420 [cpp]
This commit is contained in:
parent
49a63927cc
commit
dd36e2069e
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue