[c++] 두 이진 트리 병합(Merge Two Binary Trees)

두 이진 트리를 병합하는 문제는 주어진 두 이진 트리의 각 노드를 더한 값을 새 이진 트리로 구성하는 문제입니다. 두 이진 트리의 해당 노드가 null일 경우에는 두 값을 더하지 않고, 하나만 null인 경우에는 다른 값을 가져와야 합니다.

이 문제는 재귀적인 방법으로 해결할 수 있습니다. 각 노드마다 왼쪽 자식과 오른쪽 자식을 재귀적으로 병합하고, 현재 노드의 값을 합쳐서 새 노드를 생성하면 됩니다.

class TreeNode {
public:
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
    if (t1 == NULL) return t2;
    if (t2 == NULL) return t1;
    TreeNode* merged = new TreeNode(t1->val + t2->val);
    merged->left = mergeTrees(t1->left, t2->left);
    merged->right = mergeTrees(t1->right, t2->right);
    return merged;
}

위의 코드는 C++로 구현한 두 이진 트리를 병합하는 함수입니다. 재귀적인 방식으로 mergeTrees 함수를 호출하여 두 이진 트리를 병합하고, 결과로 새로운 이진 트리를 반환합니다.

이 함수를 호출하면 두 이진 트리가 병합되어 새로운 이진 트리가 반환됩니다.

이 문제의 자세한 설명과 다른 언어로의 구현 방법은 LeetCode에서 확인할 수 있습니다.

이번 포스트에서는 두 이진 트리를 병합하는 문제를 C++로 구현하는 방법에 대해 알아보았습니다.