You need to enable JavaScript to run this app. LeetCode #94 二叉树中序遍历代码中tmp变量的作用是什么
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode #94 二叉树中序遍历代码中tmp变量的作用是什么

关于Morris中序遍历中tmp变量的作用

你所提供的代码是二叉树中序遍历的Morris遍历实现,这种算法不需要额外栈存储空间,空间复杂度为O(1)。你提到的tmp相关两行代码核心作用是切断当前节点和左子树的关联,避免遍历过程中出现环,从而防止死循环超时。

具体逻辑拆解:

当处理存在左子树的节点root时,代码会先完成两个前置操作:

  • 找到root左子树的最右节点pre,将pre.right指向root,相当于给左子树遍历完之后搭一个跳回当前节点的桥
  • 把root移动到左子节点,继续遍历左子树

如果没有tmp = root和tmp.left = None这两行:
当后续遍历完左子树,通过之前搭的桥跳回原root节点时,程序会再次检测到该节点存在左子树,又会重复执行「找左子树最右节点」的逻辑。此时因为之前已经把左子树最右节点的right指向了原root,找最右节点的循环会在原root和左子树之间无限执行,最终触发超时错误。

tmp的作用就是暂存原root节点的引用:Python中对象是引用传递,tmp和修改前的root指向同一个二叉树节点对象,修改tmp.left本质就是修改原节点的左子树指针,不需要把tmp用到其他地方也能生效。将原节点的left置为None后,后续再次访问到该节点时就不会重复处理左子树,也就不会出现死循环。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 04:06:07