当前位置: 首页 > 知识库问答 >
问题:

LeetCode#617“合并两个二叉树”使用C

许波涛
2023-03-14

问题是:

给定两棵二叉树,想象一下,当您将其中一棵树覆盖另一棵树时,两棵树的一些节点重叠,而其他节点则不重叠。

您需要将它们合并到一个新的二叉树中。合并规则是,如果两个节点重叠,则将节点值加起来作为合并节点的新值。否则,非空节点将用作新树的节点。

Example 1:
Input: 
    Tree 1                     Tree 2                  
          1                         2                             
         / \                       / \                            
        3   2                     1   3                        
       /                           \   \                      
      5                             4   7                  
Output: 
Merged tree:
         3
        / \
       4   5
      / \   \ 
     5   4   7

注意:合并过程必须从两棵树的根节点开始。

我试图解决这个leetcode问题,但总是得到错误的答案。

我的答案是:

**Merged tree:
         3
        / \
       4   5
      /   
     5**

似乎我丢失了节点4和节点7。

然而,从std::cout中,所有节点都已创建,但似乎树尚未构建。

我非常感谢对我的代码的任何评论:

class Solution {

public:

TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
if (t1 == NULL && t2 == NULL)
    return NULL;
else if (t1 == NULL && t2 != NULL) {

    t1 = new TreeNode(t2->val);
    cout << "vq1:" << t1->val << endl;

    mergeTrees(t1->left, t2->left);
    mergeTrees(t1->right, t2->right);
}
else if (t1 != NULL && t2 == NULL) {
    t1->val += 0;
    cout << "vu1:" << t1->val << endl;
    mergeTrees(t1->left, NULL);
    mergeTrees(t1->right, NULL);
}
else if (t1 != NULL && t2 != NULL) {
    t1->val += t2->val;
    cout << "vx1:" << t1->val << endl;

    mergeTrees(t1->left, t2->left);
    mergeTrees(t1->right, t2->right);

}
return t1;
}
};

共有1个答案

佘单鹗
2023-03-14

您正在更新节点,但不是节点的左、右子节点,

TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {

    if (t1 == NULL && t2 == NULL)
        return NULL;
    else if (t1 == NULL && t2 != NULL) {

        t1 = new TreeNode(t2->val);
        cout << "vq1:" << t1->val << endl;

        t1->left = mergeTrees(t1->left, t2->left);
        t1->right = mergeTrees(t1->right, t2->right);
    }
    else if (t1 != NULL && t2 == NULL) {
        t1->val += 0;
        cout << "vu1:" << t1->val << endl;
        t1->left = mergeTrees(t1->left, NULL);
        t1->right = mergeTrees(t1->right, NULL);
    }
    else if (t1 != NULL && t2 != NULL) {
        t1->val += t2->val;
        cout << "vx1:" << t1->val << endl;

        t1->left = mergeTrees(t1->left, t2->left);
        t1->right = mergeTrees(t1->right, t2->right);

    }
    return t1;
}
 类似资料:
  • 我正在研究合并两个二叉树的问题(https://www.geeksforgeeks.org/merge-two-binary-trees-node-sum/)我很难理解一些递归。为什么要将递归语句设置为和?当你这样做的时候,是否等于两个值? 我只是不确定为什么我们要将递归语句设置为t1.leftt1.right'

  • 我正在尝试合并2棵二叉树,而不用担心使结果树平衡。这是我的解决方案,但不起作用。为什么Treenode ans和head从合并函数返回时设置为0。正如我所理解的,由于TreeNode不是原始类型,因此指向ans的head应该在调用合并函数后使用生成的树更新https://leetcode.com/problems/merge-two-binary-trees/

  • 我已经在“合并两棵二叉树”上工作了好几个小时了,我不明白为什么我的代码不起作用。树t1被指定为[1,3,2,5],树t2被指定为[2,1,3,null,4,null,7],我必须通过对重叠节点求和并尽可能避免null来合并这两棵树,因此结果应该是[3,4,5,5,4,null,7]。我不是像我应该的那样创建一棵新树,而是重写树t1以获得所需的结果。我的代码如下: 我的代码运行时没有错误,我的最终结

  • 它在我的Xcode中运行正常,所以有人能告诉我有什么问题吗? 我测试了,问题是在为堆栈重新分配空间,但我不明白这个错误…测试用例是[1,null,2,3],所以1是根,2是1的右子,3是2的左子。解决方案应该返回数组[1,2,3]。

  • 本文向大家介绍手写代码:两个平衡二叉树合并是怎么做的相关面试题,主要包含被问及手写代码:两个平衡二叉树合并是怎么做的时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 首先,将两棵树分别展开为有序链表 然后将两个有序链表合并  

  • 我在用Python做上面的leetcode问题。我通常会在jupyter笔记本上解决问题,然后在完成后将其复制并粘贴到leetcode解决方案框中。然而,我对这个问题有异议。 给定二进制搜索树(BST)的根,将其转换为大树,以便原始BST的每个键都更改为原始键加上大于BST中原始键的所有键的总和。 提醒一下,二叉搜索树是满足以下约束的树: 节点的左子树仅包含键小于节点键的节点。节点的右子树仅包含键