Skip to content

Instantly share code, notes, and snippets.

@ufo22940268
Created April 29, 2021 09:03
Show Gist options
  • Save ufo22940268/4c54133f6c8d7549b920ba0c216690b2 to your computer and use it in GitHub Desktop.
Save ufo22940268/4c54133f6c8d7549b920ba0c216690b2 to your computer and use it in GitHub Desktop.
//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. Th
//e root of the BST is given as part of the constructor. The pointer should be ini
//tialized 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 t
//he right of the pointer, otherwise returns false.
// int next() Moves the pointer to the right, then returns the number at the poi
//nter.
//
//
// Notice that by initializing the pointer to a non-existent smallest number, th
//e 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.
//
//
// Example 1:
//
//
//Input
//["BSTIterator", "next", "next", "hasNext", "next", "hasNext", "next", "hasNext
//", "next", "hasNext"]
//[[[7, 3, 15, null, null, 9, 20]], [], [], [], [], [], [], [], [], []]
//Output
//[null, 3, 7, true, 9, true, 15, true, 20, false]
//
//Explanation
//BSTIterator bSTIterator = new BSTIterator([7, 3, 15, null, null, 9, 20]);
//bSTIterator.next(); // return 3
//bSTIterator.next(); // return 7
//bSTIterator.hasNext(); // return True
//bSTIterator.next(); // return 9
//bSTIterator.hasNext(); // return True
//bSTIterator.next(); // return 15
//bSTIterator.hasNext(); // return True
//bSTIterator.next(); // return 20
//bSTIterator.hasNext(); // return False
//
//
//
// Constraints:
//
//
// The number of nodes in the tree is in the range [1, 105].
// 0 <= Node.val <= 106
// At most 105 calls will be made to hasNext, and next.
//
//
//
// Follow up:
//
//
// Could you implement next() and hasNext() to run in average O(1) time and use
//O(h) memory, where h is the height of the tree?
//
// Related Topics 栈 树 设计
// 👍 444 👎 0
//leetcode submit region begin(Prohibit modification and deletion)
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
*/
var BSTIterator = function (root) {
const stack = [];
function traverse(n) {
if (n.left) {
traverse(n.left);
}
stack.push(n);
if (n.right) {
traverse(n.right);
}
}
traverse(root);
this.stack = stack;
};
/**
* @return {number}
*/
BSTIterator.prototype.next = function () {
return this.stack.shift().val;
};
/**
* @return {boolean}
*/
BSTIterator.prototype.hasNext = function () {
return !!this.stack.length;
};
/**
* Your BSTIterator object will be instantiated and called as such:
* var obj = new BSTIterator(root)
* var param_1 = obj.next()
* var param_2 = obj.hasNext()
*/
//leetcode submit region end(Prohibit modification and deletion)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment