LeetCode #617 "Merge Two Binary Trees"使用C++

LeetCode #617 "Merge Two Binary Trees" using C++

本文关键字:Trees 使用 Binary C++ Two #617 Merge LeetCode      更新时间:2023-10-16

问题是:

给定了两棵二进制树,想象一下,当您将其中一个覆盖另一棵树时,两棵树的某些节点被重叠,而另一些则没有。

您需要将它们合并为新的二进制树。合并规则是,如果两个节点重叠,则将节点值作为合并节点的新值。否则,非零节点将用作新树节点。

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;
}
};

您正在更新节点,但没有节点的左右孩子试试看,

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;
}