Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 n-ary 트리에서 주어진 값보다 큰 노드 수

<시간/>

n-ary 트리와 숫자가 주어지면 주어진 숫자보다 큰 노드의 수를 계산해야 합니다. 예를 들어 보겠습니다.

입력

tree = [[4], [1, 2], [3, 5]]
n = 2

출력

3

n보다 큰 값을 가진 3개의 노드가 있습니다.

알고리즘

  • n-ary 트리를 초기화합니다.

  • 카운트를 0으로 초기화합니다.

  • 값이 n보다 큰 노드를 찾으면 카운트를 1씩 증가시킵니다.

  • 현재 노드의 자식을 가져옵니다.

  • 모든 자식에 대해 반복하고 동일한 함수를 재귀적으로 호출하여 노드를 계산합니다.

  • 카운트를 반환합니다.

구현

다음은 위의 알고리즘을 C++로 구현한 것입니다.

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   vector<Node*> child;
};
Node* getNewNode(int data) {
   Node* temp = new Node;
   temp->data = data;
   return temp;
}
int getGreaterElementsCount(Node* root, int n) {
   if (root == NULL)
      return 0;
   int count = 0;
   if (root->data > n) {
      count++;
   }
   int nodeChildrenCount = root->child.size();
   for (int i = 0; i < nodeChildrenCount; i++) {
      Node* child = root->child[i];
      count += getGreaterElementsCount(child, n);
   }
   return count;
}
int main() {
   Node* root = getNewNode(1);
   (root->child).push_back(getNewNode(2));
   (root->child).push_back(getNewNode(3));
   (root->child).push_back(getNewNode(4));
   (root->child[0]->child).push_back(getNewNode(5));
   (root->child[0]->child).push_back(getNewNode(5));
   (root->child[1]->child).push_back(getNewNode(6));
   (root->child[1]->child).push_back(getNewNode(6));
   (root->child[1]->child).push_back(getNewNode(7));
   (root->child[2]->child).push_back(getNewNode(8));
   (root->child[2]->child).push_back(getNewNode(8));
   (root->child[2]->child).push_back(getNewNode(9));
   int n = 2;
   cout << getGreaterElementsCount(root, n) << endl;
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

10