您的位置:首页 > 编程语言 > Java开发

【leetcode】【173】Binary Search Tree Iterator

2016-03-15 15:25 477 查看

一、问题描述

Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the root node of a BST.

Calling 
next()
 will return the next smallest number in the BST.

Note: 
next()
 and 
hasNext()
 should
run in average O(1) time and uses O(h) memory, where h is the height of the tree.

二、问题分析

这是一道design类的题目。涉及的是二叉查找树,题目要求uses O(h) memory,因此我们不能先完全遍历完,然后再访问。也不能next()一次现遍历,结合树的非递归遍历方法,我们需要一个存储结构来暂存提前遍历的某些数据,因此可以用stack。因此结合二叉查找树的特点和树的非递归遍历,比较能想到。

三、Java AC代码

public class BSTIterator {

private TreeNode root ;
private LinkedList<TreeNode> stack ;
public BSTIterator(TreeNode root) {
this.root = root;
stack = new LinkedList<TreeNode>();
setNext(root);
}
public void setNext(TreeNode root){
while(root!=null){
stack.push(root);
root = root.left;
}
}
/** @return whether we have a next smallest number */
public boolean hasNext() {
return !stack.isEmpty();
}

/** @return the next smallest number */
public int next() {
TreeNode node = stack.pop();
setNext(node.right);
return node.val;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java leetcode tree