news 2026/4/16 10:16:52

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/4/15 21:40:02

8个顶尖AI论文写作平台功能对比,支持降重与改写

AI论文工具的选择需结合降重、降AIGC率及写作需求进行综合评估。根据实测数据与用户反馈&#xff0c;主流工具在效率、准确性和易用性方面表现各异&#xff0c;例如部分平台擅长语义重构降低重复率&#xff0c;而另一些则通过算法优化减少AI生成痕迹。实际应用中需优先匹配核心…

作者头像 李华
网站建设 2026/4/13 15:12:16

高效论文生成工具盘点,涵盖AI降重与自动写作功能

AI论文工具的选择需要结合降重、降AIGC率、写作效率等核心需求。通过实测数据和用户反馈综合评估&#xff0c;目前主流的8款工具中&#xff0c;排名靠前的平台在准确性、易用性和处理速度上表现突出&#xff0c;尤其擅长智能改写、降低AI生成痕迹以及辅助论文创作&#xff0c;能…

作者头像 李华
网站建设 2026/4/15 10:19:36

视听共振,心灵同频,《鸿蒙星光盛典》照亮“在一起”的心路

这是一个追光人共同点亮的夜晚&#xff0c;也是一场无关距离、只关乎信念的奔赴——当曲面屏上流光初绽&#xff0c;当第一声小号划破沉静&#xff0c;深圳龙岗大运体育中心场馆内&#xff0c;四万盏灯球应声而亮&#xff0c;汇成澎湃的星海。每一盏灯&#xff0c;都是一份跨越…

作者头像 李华
网站建设 2026/4/15 23:41:28

Java基于springboot+vue的社区残障人士服务平台系统

前言 社区残障人士服务平台系统是一个针对社区内残障人士的综合性服务平台。该平台旨在通过提供一系列便捷、高效的服务&#xff0c;帮助残障人士更好地融入社区生活&#xff0c;提高他们的生活质量。平台主要包括用户、残疾类型、岗位类型、补助类型、服务类型、残障认证、困难…

作者头像 李华
网站建设 2026/4/16 3:27:47

[技术讨论] 【C语言实战经验6】什么是防御式编程?请看代码

为什么会有防御式编程呢&#xff1f;其实防御式编程的概念来源于防御式驾驶思维&#xff0c;因为你不知道也无法确定司机下一步要做什么&#xff0c;那怎么样才能保证司机在做出危险动作的时候自己不会受到伤害呢&#xff1f;这个时候就需要自己承担自我保护责任&#xff0c;就…

作者头像 李华
网站建设 2026/4/14 15:04:21

8个高效AI论文生成网站对比,支持降重与写作优化

面对海量AI论文工具的选择难题&#xff0c;可从降重效果、AIGC率优化及论文写作能力等核心维度评估热门平台。实测数据和用户反馈显示&#xff0c;主流工具在效率、准确度及操作便捷性方面表现差异显著&#xff0c;以下为综合性能排名参考。排名工具名称关键优势1aibiye高度适配…

作者头像 李华