You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode 94迭代式DFS中序遍历遇内存超限,求原因及建议

LeetCode 94题迭代式中序遍历内存超限问题解答

问题1:是否不建议使用continue?

continue本身没问题,它只是用来跳过当前循环剩余语句、直接进入下一轮循环的语法,合理使用不会引发内存问题。你代码里的问题不是continue这个关键字导致的,而是用它实现的逻辑有漏洞。

问题2:内存超限的原因是什么?

你的代码存在死循环重复压栈的问题:
当处理一个带左子节点的节点时,你把左子节点压入栈后用continue跳过后续操作。等左子节点处理完弹出后,循环会再次回到原节点,此时原节点的左子节点依然存在,你又会再次把左子节点压入栈——这个过程会无限重复,栈里的元素会越来越多,最终触发内存超限。

举个例子:假设节点A有左子节点B,第一次循环压入B,continue;B处理完弹出后,回到A,又检测到A的左子节点B存在,再次压入B,无限循环,栈里会不断积累B节点,内存直接爆掉。

修正后的代码

正确的迭代式中序遍历应该先遍历到最左节点,回溯处理节点后再处理右子树,避免重复压栈:

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> ans;
        vector<TreeNode*> stack;
        TreeNode* current = root;
        
        while (current != nullptr || !stack.empty()) {
            // 先走到当前节点的最左子节点,沿途节点全部压栈
            while (current != nullptr) {
                stack.push_back(current);
                current = current->left;
            }
            
            // 弹出栈顶节点,加入结果集
            current = stack.back();
            stack.pop_back();
            ans.push_back(current->val);
            
            // 转向处理右子树
            current = current->right;
        }
        
        return ans;
    }
};

内容的提问来源于stack exchange,提问作者my_first_step

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 16:27:19