【leetcode】【173】Binary Search Tree Iterator

来源:互联网 发布:网络规划设计师真题 编辑:程序博客网 时间:2024/06/06 02:44

一、问题描述

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;}}


0 0
原创粉丝点击