递归合并
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
#define solve(a,b) ((b)+=((a)?(a->val):0))
#define judge_left(a) ((a)&&(a->left))
#define judge_right(a) ((a)&&(a->right))
#define get_left(a) (judge_left(a)?(a)->left : NULL)
#define get_right(a) (judge_right(a)?(a)->right : NULL)
class Solution {
public:
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
TreeNode *root = NULL;
if (root1 || root2)
{
int val = 0;
solve(root1, val);
solve(root2, val);
root = new TreeNode(val, NULL, NULL);
if (judge_left(root1) || judge_left(root2))
root->left = mergeTrees(get_left(root1), get_left(root2));
if (judge_right(root1) || judge_right(root2))
root->right = mergeTrees(get_right(root1), get_right(root2));
}
return root;
}
};