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

三元表达式无法更新值但if语句正常,原因是什么?

问题根源:三元表达式会覆盖之前的结果,而if语句只做单向修改

咱们先拆解两种写法的逻辑差异,就能明白为啥结果不一样了:

1. if语句的逻辑

你的if代码是这样的:

if(Math.abs(lh-rh)>1) is_balanced = false;

它的行为是只有在当前节点不平衡的时候,才把is_balanced改成false。一旦is_balanced被设为false,后续递归过程中没有任何代码会把它改回true——毕竟只要树里存在一个不平衡的节点,整棵树就是不平衡的,这个逻辑是完全正确的。

2. 三元表达式的逻辑

你尝试的三元表达式是:

is_balanced = Math.abs(lh-rh) > 1 ? false:true;

这就完全不一样了!它的行为是不管当前节点是否平衡,都会重新给is_balanced赋值。举个实际场景的例子:

  • 递归先碰到一个不平衡的节点,把is_balanced设为false;
  • 接着递归到其他平衡的节点时,三元表达式会把is_balanced又改回true;
  • 最终结果就错误地变成了true,但实际上树是存在不平衡节点的。

简单说,三元表达式每次都“重置”了结果,而if语句只在发现问题时标记错误,之后保持这个错误状态不变——这才符合判断整棵树是否平衡的核心逻辑。

额外小建议:优化你的写法

顺便提一句,用全局静态变量传递状态的写法其实容易踩坑(比如多次调用函数时变量不会自动重置)。更优雅的做法是让递归函数同时返回高度和是否平衡的状态,比如用一个自定义类或者数组来封装这两个值,这样就不需要依赖全局变量了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:23:14