LeetCode 617: Merge Two Binary Trees
문제 자체는 크게 어려울 게 없다. 두 개의 바이너리 트리를 겹친다고 생각하고, 겹치는 두 노드가 있을 경우 두 노드의 값만 더해주면 된다. 트리 문제여서 간단하게 재귀로 해결하였는데, 나는 일일히 비교하였지만 다른 사람의 코드를 보다가 시간을 줄일 수 있는 좋은 코드를 찾았다.
class Solution {
public:
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
if(t1==NULL&&t2==NULL)
return NULL;
else if(t1&&t2==NULL)
return t1;
else if(t1==NULL&&t2)
return t2;
else{
t1->val=t1->val+t2->val;
}
t1->left = mergeTrees(t1->left,t2->left);
t1->right = mergeTrees(t1->right,t2->right);
return t1;
}
};
즉, 다른 하나의 트리는 노드가 있지만 다른 트리는 같은 위치에 노드가 없는 경우, 그냥 노드가 있는 트리의 해당 노드를 반환해주기만 하면 된다. 이렇게 하면 재귀 횟수를 줄일 수 있다.