给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。
你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。
示例 1:
注意: 合并必须从两个树的根节点开始。
思路:
常规操作,遍历+相加
问题:为啥平台都能通过了,但是自己测试一直不对??这年头写代码都得凭感觉了吗??
#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
} TreeNode,*SearchTree,*Position;
void PreOrderTraversal(SearchTree T)
{
if(T==NULL)
return;
cout<<T->val<<" ";
PreOrderTraversal(T->left);
PreOrderTraversal(T->right);
}
SearchTree Insert(int val,SearchTree T)
{
if(T==NULL)
{
T = (SearchTree)malloc(sizeof(TreeNode));
if(T==NULL)
{
cout<<"MALLOC ERROR\n"<<endl;
exit(1);
}
T->val = val;
T->left = T->right = NULL;
}
else
{
if(val>T->val)
T->right = Insert(val,T->right);
else if(val<T->val)
T->left = Insert(val,T->left);
}
return T;
}
class Solution
{
public:
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2)
{
if(t1==NULL || t2==NULL)
return t1==NULL ? t2 : t1;
else
t1->val += t2->val;
t1->left = mergeTrees(t1->left,t2->left);
t1->right = mergeTrees(t1->right,t2->right);
return t1;
}
};
int main()
{
Solution s;
SearchTree T1 = NULL;
SearchTree T2 = NULL;
SearchTree T3 = NULL;
T1 = Insert(1,T1);
T1 = Insert(3,T1);
T1 = Insert(2,T1);
T1 = Insert(5,T1);
T2 = Insert(2,T2);
T2 = Insert(1,T2);
T2 = Insert(3,T2);
T2 = Insert(4,T2);
T2 = Insert(7,T2);
PreOrderTraversal(T1);
cout<<endl;
PreOrderTraversal(T2);
cout<<endl;
T3 = s.mergeTrees(T1,T2);
PreOrderTraversal(T3);
cout<<endl;
return 0;
}