设计模式-迭代器模式

文章目录

迭代器模式

如:集合中常见的迭代器

定义:迭代器模式提供了一种方法顺序访问一个聚合对象中的各个元素,而又无需暴露该对象的内部实现,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据

比如LeetCode:173. 二叉搜索树迭代器,可以内部各种方式实现,但是对外就是如下两个方法

java 复制代码
public int next()

public boolean hasNext()
  • ac
java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class BSTIterator {
    // O(h)的存储
    Stack<TreeNode> sta;

    private void left2Stack(TreeNode root){
        while (root != null){
            sta.push(root);
            root = root.left;
        }
    }

    public BSTIterator(TreeNode root) {
        sta = new Stack<>();
        left2Stack(root);
    }

    /** @return the next smallest number */
    public int next() {
        TreeNode node = sta.pop();
        if(node.right != null){
            left2Stack(node.right);
        }
        return node.val;
    }

    /** @return whether we have a next smallest number */
    public boolean hasNext() {
        return ! sta.isEmpty();
    }
}

/**
 * Your BSTIterator object will be instantiated and called as such:
 * BSTIterator obj = new BSTIterator(root);
 * int param_1 = obj.next();
 * boolean param_2 = obj.hasNext();
 */
相关推荐
代码萌新知18 小时前
设计模式学习(五)装饰者模式、桥接模式、外观模式
java·学习·设计模式·桥接模式·装饰器模式·外观模式
iナナ20 小时前
Spring Web MVC入门
java·前端·网络·后端·spring·mvc
驱动探索者20 小时前
find 命令使用介绍
java·linux·运维·服务器·前端·学习·microsoft
卷Java21 小时前
违规通知功能修改说明
java·数据库·微信小程序·uni-app
CoderYanger21 小时前
优选算法-双指针:2.复写零
java·后端·算法·leetcode·职场和发展
小雨凉如水21 小时前
k8s学习-pod的生命周期
java·学习·kubernetes
charlie11451419121 小时前
理解C++20的革命特性——协程支持2:编写简单的协程调度器
c++·学习·算法·设计模式·c++20·协程·调度器
李宥小哥21 小时前
C#基础10-结构体和枚举
java·开发语言·c#
笨手笨脚の21 小时前
设计模式-适配器模式
设计模式·适配器模式·结构型设计模式
领创工作室21 小时前
安卓设备分区作用详解-测试机红米K40
android·java·linux