이진 트리가 있다고 가정해 보겠습니다. 이 이진 트리는 BST가 아닙니다. 이진 트리에 동일한 요소가 두 번 이상 포함되어 있는지 확인해야 합니다. 이를 해결하기 위해 해싱을 사용합니다. 주어진 트리를 탐색하고 각 노드에 대해 노드가 테이블에 있는지 여부를 확인하고 이미 있는 경우에는 false를 반환하고 그렇지 않으면 true를 반환합니다.
예시
#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.