首页 > 编程语言 >#yyds干货盘点# LeetCode程序员面试金典:二叉搜索树迭代器

#yyds干货盘点# LeetCode程序员面试金典:二叉搜索树迭代器

时间:2023-05-28 21:01:47浏览次数:39  
标签:返回 yyds arr hasNext 金典 BSTIterator next root LeetCode

1.简述:

实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器:

BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。

boolean hasNext() 如果向指针右侧遍历存在数字,则返回 true ;否则返回 false 。

int next()将指针向右移动,然后返回指针处的数字。

注意,指针初始化为一个不存在于 BST 中的数字,所以对 next() 的首次调用将返回 BST 中的最小元素。

你可以假设 next() 调用总是有效的,也就是说,当调用 next() 时,BST 的中序遍历中至少存在一个下一个数字。

 

示例:

输入

["BSTIterator", "next", "next", "hasNext", "next", "hasNext", "next", "hasNext", "next", "hasNext"]

[[[7, 3, 15, null, null, 9, 20]], [], [], [], [], [], [], [], [], []]

输出

[null, 3, 7, true, 9, true, 15, true, 20, false]

解释

BSTIterator bSTIterator = new BSTIterator([7, 3, 15, null, null, 9, 20]);

bSTIterator.next();    // 返回 3

bSTIterator.next();    // 返回 7

bSTIterator.hasNext(); // 返回 True

bSTIterator.next();    // 返回 9

bSTIterator.hasNext(); // 返回 True

bSTIterator.next();    // 返回 15

bSTIterator.hasNext(); // 返回 True

bSTIterator.next();    // 返回 20

bSTIterator.hasNext(); // 返回 False

2.代码实现:

class BSTIterator {
    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);
    }
}

标签:返回,yyds,arr,hasNext,金典,BSTIterator,next,root,LeetCode
From: https://blog.51cto.com/u_15488507/6366427

相关文章

  • LeetCode 周赛 347(2023/05/28)二维空间上的 LIS 最长递增子序列问题
    本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]提问。往期回顾:LeetCode单周赛第346场·仅68人AK的最短路问题周赛347概览T1. 移除字符串中的尾随零(Easy)标签:模拟、字符串T2.对角线上不同值的数量差(Easy)标签:前后缀分解T3.使所有字符......
  • LeetCode 652. 寻找重复的子树
    classSolution{public:vector<TreeNode*>res;unordered_map<string,int>hashmap;//记录每一个子树出现的次数stringdfs(TreeNode*root){if(!root)return"";stringstr="";str+=to_string(root......
  • LeetCode-Java题解 977. Squares of a Sorted Array
    题目地址:977.SquaresofaSortedArray解题思路:    又是一道双指针的题目,看见秒想到双指针(平方直接调用sort方法也行,但是这么写这题就没意思了)。但是,我一直在想,不增加空间消耗的情况下,如何进行排列,想了半天把自己绕进去了。开辟一个新数组,倒序放置就非常简单了。一定要利......
  • leetcode: 对称二叉树
    题目描述给你一个二叉树的根节点 root ,检查它是否轴对称。示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输出:false提示:树中节点数目在范围 [1,1000] 内-100<=Node.val<=100题目地址:对称二叉树思路遍历每一个节......
  • leetcode:合并两个有序数组
    题目给你两个按非递减顺序排列的整数数组 nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1......
  • 【LeetCode】704.二分查找
    704.二分查找解析:思路一:暴力解法,直接遍历,从头开始查找,如果找到直接返回下标,找不到返回-1。classSolution{public:intsearch(vector<int>&nums,inttarget){for(inti=0;i<nums.size();i++){if(nums[i]==target)......
  • 力扣 662 https://leetcode.cn/problems/maximum-width-of-binary-tree/
    需要了解树的顺序存储如果是普通的二叉树,底层是用链表去连接的如果是满二叉树,底层用的是数组去放的,而数组放的时候会有索引对应当前父节点是索引i,下一个左右节点就是2i,2i+1利用满二叉树的索引特征所以需要对每个节点进行一个索引赋值,赋值在队列中,队列用数组表示核心代码......
  • leetcode: 有效的括号
    题目描述给定一个只包括'(',')','{','}','[',']' 的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。示例1:输入:"()"输出:true示例2:输入:"()[]{}"输......
  • Linux 常用命令大全【yyds干货盘点4】
    1. 文本处理catfile1file2...|command<>file1_in.txt_or_file1_out.txtgeneralsyntaxfortextmanipulationusingPIPE,STDINandSTDOUTcatfile1|command(sed,grep,awk,grep,etc...)>result.txt合并一个文件的详细说明文本,并将简介写入一个新文件中ca......
  • 【LeetCode】203. 移除链表元素
    203.移除链表元素思路一:直接删除法(迭代)1.从头结点开始向后遍历,找到等于val的结点;2.假设cur->val=val,那么要让cur的前一个结点prev的next指针指向cur的下一个结点,即prev->next=cur->next。要注意的是当头结点的值等于val时(head->val=val),因为头节点没有前一个结点,所以可......