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

ตรวจสอบว่า Binary Tree (ไม่ใช่ BST) มีค่าซ้ำกันใน C++ . หรือไม่


พิจารณาว่าเรามีไบนารีทรี ต้นไม้ไบนารีนี้ไม่ใช่ BST เราต้องตรวจสอบว่าไบนารีทรีมีองค์ประกอบเดียวกันมากกว่าหนึ่งครั้งหรือไม่ เพื่อแก้ปัญหานี้ เราจะใช้การแฮช เราจะสำรวจต้นไม้ที่กำหนด สำหรับแต่ละโหนด เราจะตรวจสอบว่ามีโหนดอยู่ในตารางหรือไม่ หากมีอยู่แล้ว ให้คืนค่าเท็จ หรือเป็นจริง

ตัวอย่าง

#include <iostream>
#include <unordered_set>
using namespace std;
class Node {
   public:
   int data;
   Node *left;
   Node *right;
};
Node* getNode(int data){
   Node *newNode = new Node;
   newNode->data = data;
   newNode->left = NULL;
   newNode->right = NULL;
   return newNode;
}
bool hasDuplicateHelper(Node *root, unordered_set<int> &s){
   if(root == NULL)
      return false;
   if (s.find(root->data) != s.end())
      return true;
   s.insert(root->data);
   return hasDuplicateHelper(root->left, s) ||  hasDuplicateHelper(root->right, s);
}
bool hasDuplicate(Node *root){
   unordered_set<int> s;
   return hasDuplicateHelper(root, s);
}
int main() {
   Node *root = getNode(10);
   root->left = getNode(20);
   root->right = getNode(20);
   root->left->left = getNode(30);
   if (hasDuplicate(root))
      cout << "The tree has duplicate elements.";
   else
      cout << "The tree has no duplicate elements.";
}

ผลลัพธ์

The tree has duplicate elements.