1. 深度优先搜索
class Solution {
public:
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
if (t1 == nullptr)
return t2;
if (t2 == nullptr)
return t1;
auto merged = new TreeNode(t1->val + t2->val);
merged->left = mergeTrees(t1->left, t2->left);
merged->right = mergeTrees(t1->right, t2->right);
return merged;
}
};
2. 广度优先搜索
class Solution {
public:
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
if(t1 == nullptr)
return t2;
if(t2 == nullptr)
return t1;
auto merged = new TreeNode(t1->val + t2 ->val);
queue<TreeNode*> q, q1, q2;
q.push(merged);
q1.push(t1);
q2.push(t2);
while(!q1.empty() && !q2.empty()) {
auto node = q.front(), node1 = q1.front(), node2 = q2.front();
auto left1 = node1->left, left2 = node2->left, right1 = node1->right, right2 = node2->right;
q.pop();
q1.pop();
q2.pop();
if(left1 != nullptr || left2 != nullptr) {
if(left1 != nullptr && left2 != nullptr) {
auto left = new TreeNode(left1->val + left2->val);
node->left = left;
q.push(left);
q1.push(left1);
q2.push(left2);
}
else if(left1 != nullptr)
node->left = left1;
else node->left = left2;
}
if(right1 != nullptr || right2 != nullptr) {
if(right1 != nullptr && right2 != nullptr) {
auto right = new TreeNode(right1->val + right2->val);
node->right = right;
q.push(right);
q1.push(right1);
q2.push(right2);
}
else if(right1 != nullptr)
node->right = right1;
else node->right = right2;
}
}
return merged;
}
};