本题递归法思路如下:
(1)确定递归的参数和返回值:参数为两个节点,返回值为合并后的节点
(2)确定终止条件:若输入的两个节点有一个为空,则将另一个节点作为合并后的节点返回(若两个都为空节点也适用)
(3)递归逻辑:若两个节点都存在,则合并后的节点的值为两者值相加,左右子树为两者左右子树递归
代码如下:
class Solution {
public:
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
if (t1 == NULL) return t2;
if (t2 == NULL) return t1;
// 重新定义新的节点,不修改原有两个树的结构
TreeNode* root = new TreeNode(0);
root->val = t1->val + t2->val;
root->left = mergeTrees(t1->left, t2->left);
root->right = mergeTrees(t1->right, t2->right);
return root;
}
};