当前位置: 首页 > news >正文

LeetCode -- 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.


就是实现一个搜索二叉树的迭代器。




思路:
初始化时对树中序遍历元素入队列;hasNext:判断队列是否空;Next:拿出队列当前元素。
缺陷:这个做法的缺陷在于如果只拿1个元素,仍然需要对整树遍历一次;可是大多数情况下,使用迭代器的目的显然是从头遍历到尾,因此这个方案是make sense的。


实现代码:


/**
 * Definition for binary tree
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left;
 *     public TreeNode right;
 *     public TreeNode(int x) { val = x; }
 * }
 */


public class BSTIterator {


    private Queue<int> _values ;
    public BSTIterator(TreeNode root) 
	{
       _values = new Queue<int>();
	   Init(root);
    }
	
	private void Init(TreeNode current)
	{
		if(current == null)
		{
			return;
		}
		Init(current.left);
		_values.Enqueue(current.val);
		Init(current.right);
	}


    /** @return whether we have a next smallest number */
    public bool HasNext() {
        return _values.Count > 0;
    }


    /** @return the next smallest number */
    public int Next() {
		var v = _values.Dequeue();
		return v;
    }
}


/**
 * Your BSTIterator will be called like this:
 * BSTIterator i = new BSTIterator(root);
 * while (i.HasNext()) v[f()] = i.Next();
 */


相关文章:

  • 使用pgRouting进行路径分析
  • LeetCode -- Combination Sum III
  • 怎样使用深度纹理
  • LeetCode -- Expression Add Operators
  • [Web 开发] 获取页面元素的坐标及大小
  • LeetCode -- First Bad Version
  • 本地SPAN和远程SPAN监控原理
  • LeetCode -- House Robber II
  • 打破传统,实战至上的网管师认证
  • LeetCode -- Invert Binary Tree
  • 使用简单ORM开发框架进行快速开发
  • LeetCode -- Largest Number
  • LeetCode -- Length of last word
  • 编程是一种“组合的艺术”
  • LeetCode -- Majority Element II
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [译] 怎样写一个基础的编译器
  • [译]前端离线指南(上)
  • 2017-09-12 前端日报
  • 4个实用的微服务测试策略
  • Android系统模拟器绘制实现概述
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • java正则表式的使用
  • React-flux杂记
  • ReactNativeweexDeviceOne对比
  • Webpack 4 学习01(基础配置)
  • webpack4 一点通
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 订阅Forge Viewer所有的事件
  • 动态规划入门(以爬楼梯为例)
  • 反思总结然后整装待发
  • 服务器之间,相同帐号,实现免密钥登录
  • 基于web的全景—— Pannellum小试
  • 利用DataURL技术在网页上显示图片
  • 前端性能优化--懒加载和预加载
  • 如何用vue打造一个移动端音乐播放器
  • 收藏好这篇,别再只说“数据劫持”了
  • 一道闭包题引发的思考
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (转)h264中avc和flv数据的解析
  • (转)ORM
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET Core WebAPI中封装Swagger配置
  • .NET Core 中的路径问题
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET 动态调用WebService + WSE + UsernameToken
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net分布式压力测试工具(Beetle.DT)
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • /3GB和/USERVA开关
  • @staticmethod和@classmethod的作用与区别