原题链接:173. 二叉搜索树迭代器
解题思路:
- 对二叉搜索树进行中序遍历,即可按顺序得到二叉搜索树的每个值。
- 先对输入二叉搜索树进行中序遍历,将结果保存到数组
list
中。 - 使用一个指针
index
,始终指向next
对应的取值位置。每次调用next
,都将指针向后移动一位。如果index
指向类型为number
,hasNext
返回true
。
/**
* @param {TreeNode} root
*/
var BSTIterator = function (root) {
this.list = []; // 使用数组存储每个节点的值
this.index = 0; // 用一个指针,始终指向下一个元素
// 使用中序遍历二叉搜索树,按顺序保存值到list
const traversal = (node) => {
// 如果节点为空,则退出
if (!node) {
return;
}
// 搜索左子节点
traversal(node.left);
// 将中序遍历到的节点值,存入list
this.list.push(node.val);
// 搜索右子节点
traversal(node.right);
};
// 中序遍历二叉搜索树欧
traversal(root);
};
/**
* @return {number}
*/
BSTIterator.prototype.next = function () {
// 将当前值返回,并向后移动指针
return this.list[this.index++];
};
/**
* @return {boolean}
*/
BSTIterator.prototype.hasNext = function () {
// 如果指针对应的值类型为number,表示下一项存在,否则为undefined
return typeof this.list[this.index] === 'number';
};