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

LeetCode合并二叉树代码样例通过但提交报错问题求助

合并二叉树代码问题排查与优化

问题根因

代码的核心bug出现在单侧节点为空的分支逻辑里:当node1或node2其中一个为null时,仅给新节点赋值了当前val,没有递归遍历对应非空节点的左右子树,导致非空节点的子树全部丢失,这就是提交测试用例报错的原因。
比如测试用例中出现root1为null、root2还有多层子节点的场景,原有代码只会返回根节点带val,左右子节点全为null的错误结果。

修正后的代码

class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        return traverse(root1, root2);
    }

    public TreeNode traverse(TreeNode node1, TreeNode node2){
        if(node1 == null && node2 == null){
            return null;
        }
        TreeNode newNode = new TreeNode();
        if(node1 == null){
            newNode.val = node2.val;
            newNode.left = traverse(null, node2.left);
            newNode.right = traverse(null, node2.right);
        } else if(node2 == null){
            newNode.val = node1.val;
            newNode.left = traverse(node1.left, null);
            newNode.right = traverse(node1.right, null);
        } else {
            newNode.val = node1.val + node2.val;
            newNode.left = traverse(node1.left, node2.left);
            newNode.right = traverse(node1.right, node2.right);
        }
        return newNode;
    }
}

代码优化建议

  • 可以省略不必要的中间变量,比如mergeTrees方法里直接返回traverse的结果即可,不需要额外定义ret变量
  • 如果题目允许修改原二叉树的结构,还可以不需要新建节点,直接在非空的原节点上修改值拼接子树,大幅减少内存消耗:
// 优化版(修改原树,无需额外新建全部节点)
class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        if(root1 == null) return root2;
        if(root2 == null) return root1;
        root1.val += root2.val;
        root1.left = mergeTrees(root1.left, root2.left);
        root1.right = mergeTrees(root1.right, root2.right);
        return root1;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:48:03