news 2026/9/2 2:47:29

LC.173 | 二叉搜索树迭代器 | 树 | 中序展开/栈模拟

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LC.173 | 二叉搜索树迭代器 | 树 | 中序展开/栈模拟

输入:BST 根节点root,构造BSTIterator

要求:
实现一个按中序遍历输出 BST 的迭代器:

  • next():返回下一个最小值
  • hasNext():是否还有下一个元素

输出:按题意实现类方法(next/hasNext)。


思路:

思路 A:中序遍历“展开成线性表”

核心就是一句话:

BST 中序遍历 = 递增序列
先把整棵树中序遍历一遍,把结果按顺序塞进链表/数组,然后迭代器只是在这个线性结构上移动指针。

  1. 构造时inorder(root),按中序顺序把每个节点值 append 到单链表尾部。
  2. cur指向链表头(第一个最小值)。
  3. next()返回cur->val并前进。
  4. hasNext()cur != nullptr

优点:

  • 写起来直观,next/hasNext都是 O(1)。

缺点:

  • 构造函数要遍历整棵树,时间 O(N)。
  • 额外存了 N 个节点值,空间 O(N)。
  • 题目进阶想要更省空间(典型答案是 O(H))。

思路 B:用栈模拟中序遍历(更优解的核心思想)

迭代器本质是:每次只走到“下一个该访问的中序节点”,不提前把整棵树铺开。

维护一个栈stk

  • 构造时:把root的整条左链压栈(走到最左)。
  • next()
    1. 弹出栈顶x(当前最小)
    2. 如果x有右子树,把x->right的整条左链压栈
    3. 返回x->val
  • hasNext():看栈空不空

复杂度:

  • 思路 A(暴力)

    • 构造:O(N)
    • next/hasNext:O(1)
    • 空间:O(N)
  • 思路 B(栈模拟)

    • 构造:O(H)
    • next:均摊 O(1)(每个节点最多入栈出栈一次)
    • 空间:O(H)

//思路A 暴力classBSTIterator{public:BSTIterator(TreeNode*root){dummy=newListNode(0);tail=dummy;inorder(root);cur=dummy->next;}intnext(){intval=cur->val;cur=cur->next;returnval;}boolhasNext(){returncur!=nullptr;}private:structListNode{intval;ListNode*next;ListNode(intx):val(x),next(nullptr){}};ListNode*dummy;ListNode*tail;ListNode*cur;voidinorder(TreeNode*node){if(node==nullptr)return;inorder(node->left);tail->next=newListNode(node->val);tail=tail->next;inorder(node->right);}};//思路B 栈模拟classBSTIterator{public:BSTIterator(TreeNode*root){pushLeftChain(root);}intnext(){TreeNode*node=st.top();st.pop();intret=node->val;// 下一批候选:node 的右子树的最左链if(node->right){pushLeftChain(node->right);}returnret;}boolhasNext(){return!st.empty();}private:stack<TreeNode*>st;voidpushLeftChain(TreeNode*node){while(node){st.push(node);node=node->left;}}};
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/1 18:34:10

饮食饮水代谢检测系统 呼吸能量饮食饮水代谢检测系统 大鼠代谢系统 小鼠代谢系统

动物代谢监测系统具有多通量、实时统计、自动化、高准确性等优点&#xff0c;极大地提高了药物研发和基础生命科学研究的效率&#xff0c;并从根本上减少手工操作带来数据偏差及误差。在动物无拘束状态下&#xff0c;进行多通道测量,记录软件能实时统计大小鼠的饮食量、饮水量、…

作者头像 李华
网站建设 2026/9/1 22:25:21

智能论文改写工具推荐,8款AI平台助你轻松完成写作

目前市面上有多款AI论文辅助工具&#xff0c;通过对8个主流平台的综合评测发现&#xff0c;这些工具在论文降重、降低AI生成内容检测率以及辅助写作等方面各具特色&#xff0c;根据实际测试结果和用户评价显示&#xff0c;其性能表现主要取决于处理效率、内容准确度及操作便捷性…

作者头像 李华
网站建设 2026/9/1 8:36:27

基于SpringBoot+Spark+vue的在线广告推荐系统

前言 在线广告推荐系统的研究与开发从理论上讲&#xff0c;该系统涉及数据挖掘、机器学习、用户行为分析等多个前沿领域&#xff0c;为研究者提供了一个综合性的研究课题。通过不断优化推荐算法&#xff0c;可以推动相关理论的发展&#xff0c;特别是在大数据处理和实时推荐技术…

作者头像 李华
网站建设 2026/9/2 4:38:58

上位机是什么意思?图文并茂的新手教程

上位机是什么&#xff1f;一文搞懂工业控制中的“大脑”角色你有没有在工厂里见过这样的场景&#xff1a;一个操作员坐在电脑前&#xff0c;轻点几下鼠标&#xff0c;整条生产线就开始有序运转&#xff1b;屏幕上跳动着各种曲线、仪表盘和报警信息&#xff0c;仿佛一切尽在掌握…

作者头像 李华
网站建设 2026/9/1 5:00:24

你了解‌板卡控制的架构吗?‌板卡控制和PLC控制有什么区别

‌板卡控制在智能制造、能源管理、医疗研发等领域均有所使用&#xff0c;由此可见‌板卡控制的重要性。为增进大家对‌板卡控制的认识&#xff0c;本文将对‌板卡控制的架构与功能以及‌板卡控制与PLC控制的区别予以介绍。如果你对‌板卡控制具有兴趣&#xff0c;不妨继续往下阅…

作者头像 李华
网站建设 2026/8/31 15:00:03

AI论文降重与写作工具推荐:8个热门网站详细对比

在众多AI论文工具中&#xff0c;选择一款适合自己需求的平台可能令人眼花缭乱。本文将对比8款热门工具&#xff0c;重点聚焦降重、降AIGC率、写论文等功能。工具排名基于实测数据和用户反馈&#xff0c;确保客观实用性。以下是简要排行表&#xff08;基于效率、准确性和易用性&…

作者头像 李华