zoukankan      html  css  js  c++  java
  • 173_二叉搜索树迭代器

    173_二叉搜索树迭代器

    package 二叉树.二叉搜索树;
    
    import java.util.ArrayList;
    import java.util.Deque;
    import java.util.LinkedList;
    import java.util.List;
    
    /**
     * https://leetcode-cn.com/problems/binary-search-tree-iterator/ _173_二叉搜索树迭代器
     * 
     * @author Huangyujun 迭代器(容器,提前存储了按照一定规则摆放的数据)
     */
    public class _173_二叉搜索树迭代器 {
        class BSTIterator {
            // 方法一:定义了一个list 容器存放好结果(递归实现)
            private int idx;
            private List<Integer> arr;
    
            public BSTIterator(TreeNode root) {
                idx = 0;
                arr = new ArrayList<Integer>();
                inorderTraversal(root, arr);
            }
    
            public int next() {
                return arr.get(idx++);
            }
    
            public boolean hasNext() {
                return idx < arr.size();
            }
    
            private void inorderTraversal(TreeNode root, List<Integer> arr) {
                if (root == null) {
                    return;
                }
                inorderTraversal(root.left, arr);
                arr.add(root.val);
                inorderTraversal(root.right, arr);
            }
        }
    
        // 迭代实现
        class BSTIterator2 {
            private TreeNode cur;
            private Deque<TreeNode> stack;
    
            public BSTIterator2(TreeNode root) {
                cur = root;
                stack = new LinkedList<TreeNode>();
            }
    
            public int next() {
                while (cur != null) {
                    stack.push(cur);
                    cur = cur.left;
                }
                cur = stack.pop();
                int ret = cur.val;
                cur = cur.right;
                return ret;
            }
    
            public boolean hasNext() {
                return cur != null || !stack.isEmpty();
            }
        }
    
    }

    本文来自博客园,作者:一乐乐,转载请注明原文链接:https://www.cnblogs.com/shan333/p/15709274.html

  • 相关阅读:
    Java之抽象类,多态,接口
    Java之抽象类,多态
    Java之类。实例初始化
    Java基础之继承
    java面向对象之工具类
    Java基础面向对象封装
    Python入门学习资料推荐
    内网安全「攻防」学习指南
    windows文件扩展名
    java 的包命名规范
  • 原文地址:https://www.cnblogs.com/shan333/p/15709274.html
Copyright © 2011-2022 走看看