| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 | '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__()
 |