Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จำนวนโหนดที่มากกว่าค่าที่กำหนดในทรี n-ary ใน C++


ให้ต้นไม้ n-ary และตัวเลข เราต้องนับจำนวนโหนดที่มากกว่าจำนวนที่กำหนด มาดูตัวอย่างกัน

ป้อนข้อมูล

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

ผลผลิต

3

มี 3 โหนดที่มีค่ามากกว่า n

อัลกอริทึม

  • เริ่มต้นต้นไม้ n-ary

  • เริ่มต้นการนับเป็น 0

  • เพิ่มจำนวนขึ้น 1 เมื่อคุณพบโหนดที่มีค่ามากกว่า n

  • รับลูกของโหนดปัจจุบัน

  • วนซ้ำกับชายน์ทั้งหมดและเรียกใช้ฟังก์ชันเดียวกันซ้ำๆ เพื่อนับโหนด

  • คืนค่าการนับ

การนำไปใช้

ต่อไปนี้เป็นการนำอัลกอริธึมข้างต้นไปใช้ใน 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