Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LeetCode题解:617. 合并二叉树,JavaScript,详细注释 #490

Open
chencl1986 opened this issue Dec 26, 2024 · 0 comments
Open

Comments

@chencl1986
Copy link
Owner

原题链接:https://leetcode.cn/problems/merge-two-binary-trees/

这是一道关于二叉树的题目,要求我们合并两棵二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。

思路分析:

我们可以使用递归的方法来解决这个问题。具体步骤如下:

  1. 基本情况:如果 root1root2 中的任何一个为 null,则返回非空的那个节点。这是因为,如果其中一个节点为 null,那么合并的结果就是另一个节点。

  2. 递归情况:如果 root1root2 都不为 null,我们可以创建一个新的节点,其值为 root1.val + root2.val

  3. 递归合并 root1root2 的左子树,并将结果设置为新节点的左子树。

  4. 递归合并 root1root2 的右子树,并将结果设置为新节点的右子树。

  5. 返回新节点。

代码实现:

function TreeNode(val, left, right) {
    this.val = (val===undefined ? 0 : val);
    this.left = (left===undefined ? null : left);
    this.right = (right===undefined ? null : right);
}

var mergeTrees = function(root1, root2) {
    // 基本情况
    if (root1 === null) return root2;
    if (root2 === null) return root1;

    // 创建新节点
    let newNode = new TreeNode(root1.val + root2.val);

    // 递归合并左子树和右子树
    newNode.left = mergeTrees(root1.left, root2.left);
    newNode.right = mergeTrees(root1.right, root2.right);

    return newNode;
};

这种递归方法的时间复杂度是 O(min(m, n)),其中 mn 分别是两棵树的节点数。因为我们只访问了两棵树中都存在的节点。空间复杂度取决于递归的深度,最坏情况下,递归的深度等于较小的树的高度,所以空间复杂度是 O(min(height1, height2))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant