题解:进行深度遍历,同时从两棵树的根节点出发,于是有4种情况:
1.当前节点都不为空,把第2棵树的当前节点内容加到第一棵树上
2.树1节点为空,树2节点不为空,返回树2当前节点作为新的子树内容
3.树1节点不为空,树2节点为空,返回树1当前节点作为新的子树内容
4.树1树2当前节点都为空,返回NULL。
然后不断进行左子树和右子树内容更新。
AC代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* fun(TreeNode* t1, TreeNode* t2)
{
if(t1!=NULL&&t2!=NULL)
t1->val+=t2->val;
else if(t1==NULL&&t2!=NULL)
return t2;
else if(t1!=NULL&&t2==NULL)
return t1;
else return NULL;
t1->left=fun(t1->left,t2->left);
t1->right=fun(t1->right,t2->right);
return t1;
}
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
return fun(t1,t2);
}
};