题目
分析
显然这是一道搜索算法题,本题若采用BFS需要考虑很多种情况,而采用DFS则代码比较简洁易懂。
首先DFS采用递归,函数传入两个节点,优先考虑出递归的条件:
若两个根节点都是空节点则直接返回空节点
若两个节点中有一个节点是空节点则直接返回另一个非空节点
出递归条件考虑完,开始走一遍正常流程:
两个节点都非空,则new一个节点,该节点的val由这两个非空节点的val相加得到,该节点的左孩子由这两个非空节点的两个左孩子决定,右孩子同理。
完成val left right之后返回创建的这个节点。
代码
/**
* 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) {}
* };
*/
class Solution {
public:
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
if(!root1 && !root2) return nullptr;
if(!root1) return root2;
if(!root2) return root1;
TreeNode* newNode = new TreeNode(root1->val+root2->val);
newNode->left = mergeTrees(root1->left,root2->left);
newNode->right = mergeTrees(root1->right,root2->right);
return newNode;
}
};