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

咨询判断满二叉树的递归方法工作原理及代码问题

解析满二叉树判断方法中的递归逻辑

首先得给你揪出代码里的一个致命问题——你在第三个条件分支里写的 return fullHelper(node); 会触发无限递归,因为你一直在重复调用同一个节点,永远跳不出递归循环。正确的写法应该是 return fullHelper(node.left) && fullHelper(node.right);,接下来我就基于修正后的代码,给你拆解这个递归到底是怎么跑的。

递归的核心思路

满二叉树的定义很明确:每个节点要么是没有子节点的叶子节点,要么同时拥有左右两个子节点。递归的本质就是把“检查整棵子树是否为满二叉树”这个大问题,拆成“检查左子树是否符合要求”+“检查右子树是否符合要求”的小问题,一步步往下拆解直到触达终止条件。

1. 递归的终止条件

递归必须有明确的终止点,不然就会无限循环:

  • 当传入的 node == null 时:直接返回 false,因为空节点没法构成一棵有效的满二叉树(你的代码逻辑里也明确了这一点)。
  • 当 node 是叶子节点(node.left == null && node.right == null):返回 true,因为叶子节点本身就满足满二叉树的要求——它没有子节点,符合定义。

2. 递归的递推过程

当当前节点同时拥有左右子节点时,我们需要验证它的左右子树也都是满二叉树:

  • 先递归调用 fullHelper(node.left),检查左子树是否为满二叉树
  • 再递归调用 fullHelper(node.right),检查右子树是否为满二叉树
  • 只有当左右子树的检查结果都为 true 时,当前节点对应的子树才是满二叉树,所以用逻辑与 && 来合并两个结果。

3. 直接判定不合法的情况

如果当前节点只有左子节点或者只有右子节点(两个子节点不全),直接返回 false——这完全违反了满二叉树的定义,不用再往下递归了。

举个直观的例子

情况1:合法的满二叉树

1
   / \
  2   3
 / \ / \
4  5 6  7

递归执行流程:

  1. 检查根节点1:有左右子节点,递归检查2和3
  2. 检查节点2:有左右子节点,递归检查4和5
  3. 检查节点4:叶子节点,返回true;节点5:叶子节点,返回true → 节点2的结果是true && true = true
  4. 检查节点3:有左右子节点,递归检查6和7,都返回true → 节点3的结果是true
  5. 根节点1的结果是true && true = true,所以整棵树是满二叉树。

情况2:不合法的非满二叉树

1
   / \
  2   3
 /
4

递归执行流程:

  1. 检查根节点1:有左右子节点,递归检查2和3
  2. 检查节点2:只有左子节点,没有右子节点 → 直接返回false
  3. 根节点1的结果是false && true = false,所以整棵树不是满二叉树。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:31:55