python-leetcode-二叉搜索树迭代器

news/2025/2/3 1:44:56 标签: leetcode, 算法, 职场和发展

173. 二叉搜索树迭代器 - 力扣(LeetCode)

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class BSTIterator:
    def __init__(self, root: TreeNode):
        # 初始化时用栈来模拟中序遍历
        self.stack = []
        # 将左子树的所有节点压入栈
        self._push_all_left_nodes(root)
    
    # 辅助函数:将所有的左子节点压入栈
    def _push_all_left_nodes(self, node):
        while node:
            self.stack.append(node)
            node = node.left

    def hasNext(self) -> bool:
        # 判断栈是否为空
        return len(self.stack) > 0

    def next(self) -> int:
        # 弹出栈顶元素
        node = self.stack.pop()
        # 如果弹出的节点有右子树,处理右子树
        if node.right:
            self._push_all_left_nodes(node.right)
        # 返回当前节点的值
        return node.val
        


# Your BSTIterator object will be instantiated and called as such:
# obj = BSTIterator(root)
# param_1 = obj.next()
# param_2 = obj.hasNext()


http://www.niftyadmin.cn/n/5840413.html

相关文章

图书管理系统 Axios 源码 __删除图书功能

目录 代码实现(index.js) 代码解析 使用方法 下面是完整的删除图书功能代码,基于 HTML Bootstrap JavaScript Axios 开发。 代码实现(index.js) // 删除图书功能 document.querySelector(.list).addEventListen…

Qt常用控件 输入类控件

文章目录 1.QLineEdit1.1 常用属性1.2 常用信号1.3 例子1,录入用户信息1.4 例子2,正则验证手机号1.5 例子3,验证输入的密码1.6 例子4,显示密码 2. QTextEdit2.1 常用属性2.2 常用信号2.3 例子1,获取输入框的内容2.4 例…

CSS 样式化表格:从基础到高级技巧

CSS 样式化表格:从基础到高级技巧 1. 典型的 HTML 表格结构2. 为表格添加样式2.1 间距和布局2.2 简单的排版2.3 图形和颜色2.4 斑马条纹2.5 样式化标题 3. 完整的示例代码4. 总结 在网页设计中,表格是展示数据的常见方式。然而,默认的表格样式…

Python学习——函数参数详解

Python中的函数参数传递机制允许多种灵活的参数类型,可以根据需求灵活配置参数,这使得函数具有更强大的扩展性和适应性。以下是对各类参数类型的详细说明: 1. 定义函数的不同参数类型 1.1 位置参数 定义方式:def func(a, b2) 特…

41【文件名的编码规则】

我们在学习的过程中,写出数据或读取数据时需要考虑编码类型 火山采用:UTF-16 易语言采用:GBK php采用:UTF-8 那么我们写出的文件名应该是何种编码的?比如火山程序向本地写出一个“测试.txt”,理论上这个“测…

【自学笔记】Web前端的重点知识点-持续更新

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Web前端知识点一、HTML基础二、CSS样式三、JavaScript基础四、前端框架与库五、前端工具与构建六、前端性能优化七、响应式设计与适配八、前端安全 总结 Web前端知识…

Spring的AOP思想中事物管理注意点

我们以事务管理实现AOP思想 通过在Service层加入事务管理,因为Service层可能使用多个DAO(多条SQL语句) 要保证这些SQL要么同时成功,要么同时失败,例如:学生Serivce:删除学生的时候,还需要删除学生关联信息(选课信息) 只有都删除成功才提交,如果有一条执行失败…

C_C++输入输出(下)

C_C输入输出&#xff08;下&#xff09; 用两次循环的问题&#xff1a; 1.一次循环决定打印几行&#xff0c;一次循环决定打印几项 cin是>> cout是<< 字典序是根据字符在字母表中的顺序来比较和排列字符串的&#xff08;字典序的大小就是字符串的大小&#xff09;…