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

判断二叉树是否相同的递归函数:为何调用栈因逻辑与短路求值完全回退?

为什么递归比较二叉树时AND语句后半部分未执行?

这个现象的核心原因是Python里的and运算符是短路求值的,具体过程拆解如下:

  1. 第三次调用sameTree(1, None)返回False后,这个结果会传递回第二次调用的sameTree(s.left,t.left)位置。
  2. 逻辑与and的规则是:只要左边表达式结果为False,整个表达式的结果必然是False,所以Python不会再去执行右边的sameTree(s.right, t.right),直接把False返回给上一层调用。
  3. 接着这个False又成为第一次调用中sameTree(s.left,t.left)的结果,同样触发短路逻辑,第一次调用的sameTree(s.right, t.right)也不会执行,直接返回False,整个调用栈开始逐层回退。

简单来说,短路求值就是“能省则省”——既然左边已经确定结果是错的,右边再执行也改变不了最终结论,干脆就跳过不执行了,这是Python逻辑运算符的默认行为,不光递归场景,所有用到and的地方都是如此。

附上你的代码供参考:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right


x = TreeNode(4,TreeNode(1,TreeNode(1)),TreeNode(2))
y = TreeNode(4,TreeNode(1),TreeNode(2))

def sameTree(s,t):

    if not s and not t:
        return True

    if s and t and s.val == t.val:
        return (sameTree(s.left,t.left) and sameTree(s.right, t.right))

    return False

sameTree(x,y)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:10:35