当前位置: 首页 > article >正文

python-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.kler.cn/a/529293.html

相关文章:

  • 个人笔记(很没营养,纯备忘录)
  • PyTorch框架——基于深度学习YOLOv8神经网络学生课堂行为检测识别系统
  • 【Elasticsearch】实现气象数据存储与查询系统
  • Python闭包:解锁函数式编程的隐藏力量
  • 5.4.2 结构化设计方法+结构化程序设计方法
  • jvm - GC篇
  • 基于微信小程序的酒店管理系统设计与实现(源码+数据库+文档)
  • maven构件子模块步骤及注意事项
  • w185客户关系管理系统
  • AIGC技术中常提到的 “嵌入转换到同一个向量空间中”该如何理解
  • Golang 应用的 Docker 部署方式介绍及使用详解
  • 深入解析JMeter源码:AbstractThreadGroupGui抽象类的实现机制与设计哲学
  • MySQL 基础学习(5):数据库约束
  • Epoll编程——流程、易错、关键参数
  • 【C++ 区间位运算】3209. 子数组按位与值为 K 的数目|2050
  • 【开源免费】基于Vue和SpringBoot的流浪宠物管理系统(附论文)
  • 新能源算力战争:为什么AI大模型需要绿色数据中心?
  • 【DeepSeek】本地快速搭建DeepSeek
  • 10 Flink CDC
  • 【Java异步编程】CompletableFuture实现:异步任务的串行执行
  • 编程AI深度实战:给vim装上AI
  • java_包装类
  • 边缘检测算法(candy)
  • 高速PCB设计指南6——电源完整性
  • 【学习笔记之coze扣子】智能体创建
  • Mac M1 源码安装FFmpeg,开启enable-gpl 和 lib x264