617.Merge Two Binary Trees
题目链接:点此查看原题
下面是一个例子:
题目意思:
合并两个二叉树,两棵树中的一些节点会被重叠,另一些不会。
两棵树中对应节点的合并规则如下:
- 如果两个节点都不为空,则合并两个节点的值作为新节点的值
- 如果有一个节点为空,则用不空的节点作为新节点
解题思路:
给定两颗二叉树的根节点t1和t2,做如下操作:
- 如果t1和t2都为空指针,则返回空指针
- 如果t1和t2中的某一个是空指针,则返回不空的指针
- 如果t1和t2都不为空指针,则将t1的值和t2的值合并赋值给t1,并返回t1。
- 针对t1->left 和 t2->left ,进行操作1-3
- 针对t1->right 和 t2->right , 进行操作1-3
代码如下:
/**
* 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* mergeTrees(TreeNode* t1, TreeNode* t2) {
if( !t1 && !t2 ) return nullptr; //如果t1和t2都为空,则返回空指针
if( !t1 && t2 ) return t2; //如果t1为空,t2不为空,则返回t2
if( t1 && !t2 ) return t1; //如果t2为空,t1不为空,则返回t1
t1->val = t1->val + t2->val; //如果t1、t2不为空,则将t1与t2合并至t1
t1->left = mergeTrees( t1->left , t2->left ); //合并t1和t2的左子树
t1->right = mergeTrees( t1->right , t2->right ); //合并t1和t2的右子树
return t1;
}
};