1 /*
 2  * @Author: yaodaoteng
 3  * @Date: 2020-11-13 17:13:10
 4  * @LastEditors: yaodaoteng
 5  * @LastEditTime: 2020-11-13 17:21:08
 6  * @FilePath: \git\leetcode\617.合并二叉树.cpp
 7  */
 8 /*
 9  * @lc app=leetcode.cn id=617 lang=cpp
10  *
11  * [617] 合并二叉树
12  */
13 
14 // @lc code=start
15 /**
16  * Definition for a binary tree node.
17  * struct TreeNode {
18  *     int val;
19  *     TreeNode *left;
20  *     TreeNode *right;
21  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
22  * };
23  */
24 class Solution {
25 public:
26 /*
27 两个二叉树的对应节点可能存在以下三种情况,对于每种情况使用不同的合并方式。
28 
29 如果两个二叉树的对应节点都为空,则合并后的二叉树的对应节点也为空;
30 
31 如果两个二叉树的对应节点只有一个为空,则合并后的二叉树的对应节点为其中的非空节点;
32 
33 如果两个二叉树的对应节点都不为空,则合并后的二叉树的对应节点的值为两个二叉树的对应节点的值之和,此时需要显性合并两个节点。
34 
35 对一个节点进行合并之后,还要对该节点的左右子树分别进行合并。这是一个递归的过程。
36 
37 */
38     TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
39         if(t1==nullptr)
40             return t2;
41         if(t2==nullptr)
42             return t1;
43         TreeNode *merge = new TreeNode(t1->val + t2->val);
44         merge->left = mergeTrees(t1->left, t2->left);
45         merge->right = mergeTrees(t1->right, t2->right);
46         return merge;
47     }
48 };
49 // @lc code=end