[c++] 모든 노드의 깊이 합 구하기(Find Sum of Depths for All Nodes in a Tree)

이번에는 트리의 모든 노드의 깊이를 합산하는 문제를 해결해 보겠습니다. 이 문제를 해결하기 위해 트리 구조를 순회하며 각 노드의 깊이를 찾고, 이를 모두 합산하는 방법을 살펴보겠습니다.

문제 정의

주어진 이진 트리의 모든 노드의 깊이를 합산하는 함수를 구현해야 합니다.

접근 방법

우리는 트리 순회 알고리즘을 사용하여 이 문제를 해결할 수 있습니다.

깊이 우선 탐색(DFS)을 사용하여 모든 노드를 방문하면서 각 노드의 깊이를 찾을 수 있습니다. 이 때, 깊이 정보를 유지하면서 트리를 순회하는 것이 중요합니다.

다음으로, 각 노드의 깊이를 합산하여 답을 얻을 수 있습니다.

이제, 위에서 설명한 접근 방법을 사용하여 C++ 코드를 작성해 보겠습니다.

#include <iostream>
#include <queue>

// 트리의 노드를 나타내는 구조체
struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

int sumDepths(TreeNode* root) {
    if (root == nullptr) {
        return 0;
    }

    std::queue<std::pair<TreeNode*, int>> q;
    q.push({root, 0}); // pair<노드, 깊이>

    int sum = 0;

    while (!q.empty()) {
        auto node = q.front().first;
        int depth = q.front().second;
        q.pop();

        sum += depth;

        if (node->left) {
            q.push({node->left, depth + 1});
        }
        if (node->right) {
            q.push({node->right, depth + 1});
        }
    }

    return sum;
}

int main() {
    // 이진 트리 생성 및 초기화
    TreeNode* root = new TreeNode(3);
    root->left = new TreeNode(9);
    root->right = new TreeNode(20);
    root->right->left = new TreeNode(15);
    root->right->right = new TreeNode(7);

    std::cout << sumDepths(root) << std::endl; // 출력: 10

    return 0;
}

위 코드에서 sumDepths 함수는 주어진 이진 트리의 모든 노드의 깊이를 합산하여 리턴합니다.

결론

이렇게하여, 깊이 우선 탐색(DFS)을 통해 이진 트리의 모든 노드의 깊이를 합산하는 문제를 해결할 수 있습니다. 위의 코드는 주어진 이진 트리에서 모든 노드의 깊이를 합산하는 방법을 보여줍니다.

이 외에도, 서로 다른 방법으로 체크해 보실 수 있습니다.