[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++로 구현하는 방법에 대해 알아보았습니다.