文章目录
- 1.题目
- 2.代码
1.题目
- 题目要求
- eg:
示例 1:
输入:
Tree 1 Tree 2
1 2
/ \ / \
3 2 1 3
/ \ \
5 4 7
输出:
合并后的树:
3
/ \
4 5
/ \ \
5 4 7
- 思路:处理二叉树问题的神器就是递归
如果要处理的相同位置上的两个结点都不存在的话,直接返回即可;
如果 t1 存在,t2 不存在,就以 t1 的结点值建立一个新结点,然后分别对 t1 的左右子结点和空结点调用递归函数;
如果 t1 不存在,t2 存在,就以 t2 的结点值建立一个新结点,然后分别对 t2 的左右子结点和空结点调用递归函数;
如果 t1 和 t2 都存在,就以 t1 和 t2 的结点值之和建立一个新结点,然后分别对 t1 的左右子结点和 t2 的左右子结点调用递归函数;
2.代码
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode() : val(0), left(NULL),right(NULL) {}
TreeNode(int val): val(val).left(NULL),right(NULL) {}
TreeNode(int val, TreeNode* left, TreeNode* right) : val(val),left(left),right(right) {}
};
class Solution {
public:
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
TreeNode* res=NULL;
dfs(root1,root2,res);
return res;
}
void dfs(TreeNode* root1, TreeNode* root2, TreeNode* res)
{
if (!root1 && !root2) return NULL;
if (root1 && !root2)
{
res=new TreeNode(root1->val);
dfs(root1->left,NULL,res->left);
dfs(root1->right,NULL,res->right);
}
else if (!root1 && root2)
{
res=new TreeNode(root2->val);
dfs(NULL,root2->right,res->right);
dfs(NULL,root2->left,res->left);
}
else
{
res=new TreeNode(root1->val + root2->val);
dfs(root1->left,root2->left,res->left);
dfs(root1->right,root2->right,res->right);
}
}
};