zoukankan      html  css  js  c++  java
  • Java for LeetCode 173 Binary Search Tree Iterator

    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.

    解题思路:

    其实就是按照中序遍历的顺序出列,有两种实现思路:

    一、构造BST的时候直接预处理下,构造出一条按照中序遍历的list,每次读取list的元素即可。

    二、不进行预处理,按照中序遍历的思路使用Stack动态的进行处理

    这里我们实现思路二:

    public class BSTIterator {
    	private Stack<TreeNode> stack=new Stack<TreeNode>();
    
    	public BSTIterator(TreeNode root) {
    		if (root != null)
    			pushLeft(root);
    	}
    
    	/** @return whether we have a next smallest number */
    	public boolean hasNext() {
    		return !stack.isEmpty();
    	}
    
    	/** @return the next smallest number */
    	public int next() {
    		TreeNode top = stack.peek();
    		stack.pop();
    		if(top.right!=null)
    		pushLeft(top.right);
    		return top.val;
    	}
    
    	public void pushLeft(TreeNode root) {
    		stack.push(root);
    		TreeNode rootTemp = root.left;
    		while (rootTemp != null) {
    			stack.push(rootTemp);
    			rootTemp = rootTemp.left;
    		}
    	}
    }
    
  • 相关阅读:
    项目代码风格要求
    命名规范
    五招四十二式
    PMBok项目管理
    敏捷软件开发要点
    设计一种前端数据延迟加载的jQuery插件(2)
    为什么Java byte 类型的取值范围是-128~127 (转)
    Xcode编译时出现cannot run using the selected device提示
    mac下的常用操作
    iOS用AVAudioPlayer播放m4a音频
  • 原文地址:https://www.cnblogs.com/tonyluis/p/4556367.html
Copyright © 2011-2022 走看看