• Java实现 LeetCode 173 二叉搜索树迭代器


    173. 二叉搜索树迭代器

    实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。

    调用 next() 将返回二叉搜索树中的下一个最小的数。

    示例:
    在这里插入图片描述

    BSTIterator iterator = new BSTIterator(root);
    iterator.next(); // 返回 3
    iterator.next(); // 返回 7
    iterator.hasNext(); // 返回 true
    iterator.next(); // 返回 9
    iterator.hasNext(); // 返回 true
    iterator.next(); // 返回 15
    iterator.hasNext(); // 返回 true
    iterator.next(); // 返回 20
    iterator.hasNext(); // 返回 false

    提示:

    next() 和 hasNext() 操作的时间复杂度是 O(1),并使用 O(h) 内存,其中 h 是树的高度。
    你可以假设 next() 调用总是有效的,也就是说,当调用 next() 时,BST 中至少存在一个下一个最小的数。

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class BSTIterator {
     private TreeNode root;
        private List<Integer> inOrder;
        private Iterator<Integer> it;
        //中序遍历
     
        
        private void inorder(TreeNode root){
            if(root!=null){
                inorder(root.left);
                inOrder.add(root.val);
                inorder(root.right);
            }
        }
        
        public BSTIterator(TreeNode root) {
            this.root=root;
            this.inOrder = new ArrayList<>();
            inorder(this.root);
            it=this.inOrder.iterator();
        }
        
        /** @return the next smallest number */
        public int next() {
            return this.it.next();
        }
        
        /** @return whether we have a next smallest number */
        public boolean hasNext() {
            if(this.it.hasNext())
                return true;
            return false;
        }
    }
    
    /**
     * 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();
     */
    
  • 相关阅读:
    手机端阻止页面滑动-模板
    window.location各个属性-笔记
    面向对象的编程思想
    异步执行原理
    移动端rem布局实现(vw)
    用css3实现摩天轮旋转的动画效果
    js如何从一个数组中随机取出n个不同且不重复的值
    js数组中如何去除重复值?
    各大主流流浪器的内核是什么?
    javascript数组常用方法
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946738.html
Copyright © 2020-2023  润新知