-
Notifications
You must be signed in to change notification settings - Fork 61
Expand file tree
/
Copy path1586-binary-search-tree-iterator-ii.js
More file actions
72 lines (66 loc) · 2.16 KB
/
1586-binary-search-tree-iterator-ii.js
File metadata and controls
72 lines (66 loc) · 2.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/**
* 1586. Binary Search Tree Iterator II
* https://leetcode.com/problems/binary-search-tree-iterator-ii/
* Difficulty: Medium
*
* 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.
* - boolean hasPrev() Returns true if there exists a number in the traversal to the left of the
* pointer, otherwise returns false.
* - int prev() Moves the pointer to the left, 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() and prev() calls will always be valid. That is, there will be at
* least a next/previous number in the in-order traversal when next()/prev() is called.
*/
/**
* @param {TreeNode} root
*/
var BSTIterator = function(root) {
this.inorderValues = [];
this.currentIndex = -1;
this.inorderTraversal(root);
};
/**
* @param {TreeNode} node
*/
BSTIterator.prototype.inorderTraversal = function(node) {
if (!node) return;
this.inorderTraversal(node.left);
this.inorderValues.push(node.val);
this.inorderTraversal(node.right);
};
/**
* @return {boolean}
*/
BSTIterator.prototype.hasNext = function() {
return this.currentIndex + 1 < this.inorderValues.length;
};
/**
* @return {number}
*/
BSTIterator.prototype.next = function() {
this.currentIndex++;
return this.inorderValues[this.currentIndex];
};
/**
* @return {boolean}
*/
BSTIterator.prototype.hasPrev = function() {
return this.currentIndex > 0;
};
/**
* @return {number}
*/
BSTIterator.prototype.prev = function() {
this.currentIndex--;
return this.inorderValues[this.currentIndex];
};