二叉搜索树迭代器
实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。
调用 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()返回二叉搜索树中的最小数,即首先想到二叉搜索树的中序遍历可返回一个递增序列,因此在BSTIterator()函数中对二叉搜索树进行中序遍历,借用辅助数组,返回一个递增序列的数组,此时,借用一个指针curIndex指向数组的第一个元素。在next中,利用改变当前指针的指向,使之指向下一个元素,返回下一个最小值。在hasNext中。利用当前指针得位置和中序数组得长度判断,是否还有下一个next值。
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
*/
//中序遍历二叉搜索树,得到一个递增中序序列
var BSTIterator = function(root) {
if(!root){
return root
}
var arr = []
function inorder(node){
if(node.left!=null){
inorder(node.left)
}
arr.push(node.val)
if(node.right!= null){
inorder(node.right)
}
}
inorder(root)
this.arr = arr
this.curIndex = 0
this.len = arr.length
};
/**
* @return the next smallest number
* @return {number}
*/
//返回中序序列当前元素的下一个元素
BSTIterator.prototype.next = function() {
return this.arr[this.curIndex++]
};
/**
* @return whether we have a next smallest number
* @return {boolean}
*/
//判断当前元素的位置是否在中序序列长度范围内
BSTIterator.prototype.hasNext = function() {
return this.curIndex < this.len
};
/**
* Your BSTIterator object will be instantiated and called as such:
* var obj = new BSTIterator(root)
* var param_1 = obj.next()
* var param_2 = obj.hasNext()
*/