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

二叉树递归反转中new_root.left的行为解析

二叉树反转递归代码疑问解答

首先明确:不会,new_root.left不会变成new_root.left.left,我们拆解这段代码的递归逻辑就能明白:

这段代码的核心是创建全新的二叉树节点来实现反转,而非修改原树的节点结构。每一次调用invertTree方法时,都会执行以下步骤:

  1. 如果传入的root是空节点,直接返回None
  2. 基于当前root的值创建一个新节点new_root
  3. 将new_root.left赋值为「原root的右子树经过反转后的完整子树」——也就是调用self.invertTree(root.right)的返回结果
  4. 将new_root.right赋值为「原root的左子树经过反转后的完整子树」——也就是调用self.invertTree(root.left)的返回结果
  5. 返回这个新创建的new_root节点

举个简单的实例来理解:
假设原二叉树结构是:

1
   / \
  2   3
 / \
4   5
  • 第一次调用invertTree(1):
    • 创建新节点new_root(1)
    • 执行new_root.left = invertTree(3):调用invertTree(3)时,3没有左右子树,所以返回一个值为3、左右子节点都是None的新节点,此时new_root.left就是这个新的3节点
    • 执行new_root.right = invertTree(2):调用invertTree(2)时,会创建新节点new_root(2),然后它的left是invertTree(5)的返回结果(新的5节点),right是invertTree(4)的返回结果(新的4节点),最终这个新的2节点会被赋值给上层的new_root.right

最终生成的反转树结构是:

1
   / \
  3   2
     / \
    5   4

你可以看到,每一层递归里的new_root都是独立的新节点,new_root.left是原节点右子树反转后的完整子树,而非自身左子树的左子树。递归的每一层只负责处理当前层级的节点,把原节点的左右子树反转后挂到新节点的对应位置,直到递归到叶子节点为止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:22:40