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

ค้นหาจำนวนทรีย่อยที่มีค่าเดียวใน C++


สมมติว่าเรามีต้นไม้ไบนารี งานของเราคือนับทรีย่อยที่มีค่าเดียวในทรีที่กำหนด ทรีย่อยที่มีค่าเดียวคือทรีย่อย โดยที่โหนดทั้งหมดของทรีนั้นมีค่าเท่ากัน สมมติว่าต้นไม้เป็นเหมือนด้านล่าง −

ค้นหาจำนวนทรีย่อยที่มีค่าเดียวใน C++

มีสี่ทรีย่อยค่าเดียว เหล่านี้เป็นเหมือนด้านล่าง −

ค้นหาจำนวนทรีย่อยที่มีค่าเดียวใน C++

เราสามารถแก้ไขได้โดยใช้วิธีการจากล่างขึ้นบน สำหรับทุกทรีย่อยที่เข้าชม ให้คืนค่า จริง หากทรีย่อยที่รูทภายใต้นั้นมีค่าเดียว และเพิ่มตัวนับ 1 ในที่นี้ การนับคือพารามิเตอร์อ้างอิงสำหรับการเรียกซ้ำ และใช้ค่าที่ส่งคืนเพื่อดูว่าทรีย่อยซ้ายและขวามีค่าเดียวหรือไม่

ตัวอย่าง

#include <iostream>
using namespace std;
class Node {
   public:
      int data;
      Node* left, *right;
};
Node* getNode(int data) {
   Node* newNode = new Node;
   newNode->data = data;
   newNode->left = newNode->right = NULL;
   return newNode;
}
bool countSingleValuedSubtree(Node* root, int &count) {
   if (root == NULL)
   return true;
   bool left = countSingleValuedSubtree(root->left, count);
   bool right = countSingleValuedSubtree(root->right, count);
   if (left == false || right == false)
      return false;
   if (root->left && root->data != root->left->data)
      return false;
   if (root->right && root->data != root->right->data)
      return false;
      count++;
   return true;
}
int countSingleValSubtree(Node* root) {
   int count = 0;
   countSingleValuedSubtree(root, count);
   return count;
}
int main() {
   Node* root = getNode(5);
   root->left = getNode(1);
   root->right = getNode(5);
   root->left->left = getNode(5);
   root->left->right = getNode(5);
   root->right->right = getNode(5);
   cout << "Count of Single Valued Subtrees is: " << countSingleValSubtree(root);
}

ผลลัพธ์

Count of Single Valued Subtrees is: 4