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

二叉树迭代前序遍历为何用top.state++而非state++

核心原因是Java的基本类型赋值是值拷贝,修改局部变量不会影响原对象的属性

  • 你代码里int state = top.state这行,是把栈中Pair实例的state属性的值拷贝一份给到局部变量state,两个变量存储在完全独立的内存空间,没有关联。
  • 你写state++只是修改了当前栈帧里的临时局部变量的值,根本不会更新栈中存储的Pair对象的state属性。下次循环再取同一个top节点的state时,拿到的还是原来的旧值。
  • 而top.state++是直接修改栈中Pair实例的成员属性,修改结果会持久存在这个对象上,下次处理同一个节点时就能读到更新后的状态,符合你模拟递归栈的迭代遍历逻辑。

改成state++后的错误表现

当你用state++时,处理同一个节点时每次读到的state永远是初始值1:

  1. 第一次处理节点,走state==1分支加节点值到结果,局部state加1,但栈里Pair的state还是1
  2. 等左子树全部处理完成弹栈后,回到当前节点,读到的state还是1,会重复把节点值加入结果,再次压入左子树,最终要么出现死循环,要么结果里有大量重复值,完全不符合前序遍历要求。

简单验证逻辑

你可以运行这段demo直观看到区别:

class Test {
    int state = 1;
    public static void main(String[] args) {
        Test obj = new Test();
        int state = obj.state;
        state++;
        System.out.println(obj.state); // 输出还是1,局部变量修改不影响原对象属性
        obj.state++;
        System.out.println(obj.state); // 输出2,直接修改对象属性才会生效
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:42:03