题目描述
难度:Middle
相关话题:栈
、树
、设计
实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。
调用 next()
将返回二叉搜索树中的下一个最小的数。
示例:
BSTIterator iterator = new BSTIterator(root);
iterator.next(); // 返回 3
iterator.next(); // 返回 7
iterator.hasNext(); // 返回 true
iterator.next(); // 返回 9
iterator.hasNext(); // 返回 true
iterator.next(); // 返回 15
iterator.hasNext(); // 返回 true
iterator.next(); // 返回 20
iterator.hasNext(); // 返回 false
提示:
-
next()
和hasNext()
操作的时间复杂度是O(1),并使用O(h ) 内存,其中h 是树的高度。 -
你可以假设
next()
调用总是有效的,也就是说,当调用next()
时,BST 中至少存在一个下一个最小的数。
/**
* @ Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
*/
var BSTIterator = function(root) {
let node=root
let stack=[]
while(node){
stack.push(node)
node=node.left
}
this.stack=stack
};
/**
* @return the next smallest number
* @return {number}
*/
BSTIterator.prototype.next = function() {
let res=this.stack.pop()
let node=res.right
while(node){
this.stack.push(node)
node=node.left
}
return res.val
};
/**
* @return whether we have a next smallest number
* @return {boolean}
*/
BSTIterator.prototype.hasNext = function() {
return this.stack.length>0
};
/**
* Your BSTIterator object will be instantiated and called as such:
* var obj = Object.create(BSTIterator).createNew(root)
* var param_1 = obj.next()
* var param_2 = obj.hasNext()
*/
看完两件小事
如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:
- 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
- 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程
本文著作权归作者所有,如若转载,请注明出处
转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com