'use strict' /** * Definition for binary tree * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ function TreeNode(val) { this.val = val this.left = this.right = null } /** * @constructor * @param {TreeNode} root - root of the binary search tree */ var BSTIterator = function (root) { const stack = [] this.array = [] let curr = root while (stack.length !== 0 || curr !== null) { while (curr !== null) { stack.push(curr) curr = curr.left } if (stack.length !== 0) { curr = stack.pop() this.array.push(curr.val) curr = curr.right } } } /** * @this BSTIterator * @returns {boolean} - whether we have a next smallest number */ BSTIterator.prototype.hasNext = function () { return this.array.length !== 0 } /** * @this BSTIterator * @returns {number} - the next smallest number */ BSTIterator.prototype.next = function () { return this.array.shift() } /** * Your BSTIterator will be called like this: * var i = new BSTIterator(root), a = []; * while (i.hasNext()) a.push(i.next()); */ function __main__() { /* eslint no-console: ["error", {"allow": ["log"]}] */ const logger = console.log.bind(console) // 1 // / \ // 2 3 // / /\ // 4 6 7 const n7 = new TreeNode(7) const n6 = new TreeNode(6) const n4 = new TreeNode(4) const n3 = new TreeNode(3) n3.left = n6 n3.right = n7 const n2 = new TreeNode(2) n2.left = n4 const n1 = new TreeNode(1) n1.left = n2 n1.right = n3 const i = new BSTIterator(n1) const a = [] while (i.hasNext()) { a.push(i.next()) } logger(a) } __main__()