#include <iostream>
#include <vector>
using namespace std;
struct Node {
int key;
int value; // Folosim value pentru a stoca frecvența
Node* left;
Node* right;
Node(int k) : key(k), value(1), left(nullptr), right(nullptr) {}
};
class BSTMap {
private:
Node* root;
// Inserare recursivă, creștem valoarea (frecvența) dacă cheia există
Node* insert(Node* node, int key) {
if (!node) return new Node(key);
if (key < node->key)
node->left = insert(node->left, key);
else if (key > node->key)
node->right = insert(node->right, key);
else
node->value++; // Creștem frecvența dacă cheia există
return node;
}
// Căutare recursivă
Node* search(Node* node, int key) {
if (!node || node->key == key) return node;
if (key < node->key) return search(node->left, key);
return search(node->right, key);
}
// Parcurgere in-order pentru a afișa frecvențele
void inorder(Node* node) {
if (!node) return;
inorder(node->left);
std::cout << node->key << " appears " << node->value << " times\n";
inorder(node->right);
}
public:
BSTMap() : root(nullptr) {}
// Funcție publică pentru inserare
void insert(int key) {
root = insert(root, key);
}
// Funcție publică pentru a obține frecvența
int get(int key) {
Node* node = search(root, key);
return node ? node->value : 0; // 0 dacă cheia nu există
}
// Afișarea frecvențelor
void print() {
inorder(root);
}
};
int main() {
std::vector<int> arr = {7, 8, 8, 8, 7, 5, 55, 55, 101, 4, 7, 101, 1, 4};
BSTMap myMap;
// Inserăm fiecare element din array în arbore
for (int num : arr) {
myMap.insert(num);
}
// Afișăm frecvențele
myMap.print();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IE5vZGUgewogICAgaW50IGtleTsKICAgIGludCB2YWx1ZTsgLy8gRm9sb3NpbSB2YWx1ZSBwZW50cnUgYSBzdG9jYSBmcmVjdmVuyJthCiAgICBOb2RlKiBsZWZ0OwogICAgTm9kZSogcmlnaHQ7CiAgICAKICAgIE5vZGUoaW50IGspIDoga2V5KGspLCB2YWx1ZSgxKSwgbGVmdChudWxscHRyKSwgcmlnaHQobnVsbHB0cikge30KfTsKCmNsYXNzIEJTVE1hcCB7CnByaXZhdGU6CiAgICBOb2RlKiByb290OwoKICAgIC8vIEluc2VyYXJlIHJlY3Vyc2l2xIMsIGNyZciZdGVtIHZhbG9hcmVhIChmcmVjdmVuyJthKSBkYWPEgyBjaGVpYSBleGlzdMSDCiAgICBOb2RlKiBpbnNlcnQoTm9kZSogbm9kZSwgaW50IGtleSkgewogICAgICAgIGlmICghbm9kZSkgcmV0dXJuIG5ldyBOb2RlKGtleSk7CiAgICAgICAgaWYgKGtleSA8IG5vZGUtPmtleSkgCiAgICAgICAgICAgIG5vZGUtPmxlZnQgPSBpbnNlcnQobm9kZS0+bGVmdCwga2V5KTsKICAgICAgICBlbHNlIGlmIChrZXkgPiBub2RlLT5rZXkpIAogICAgICAgICAgICBub2RlLT5yaWdodCA9IGluc2VydChub2RlLT5yaWdodCwga2V5KTsKICAgICAgICBlbHNlIAogICAgICAgICAgICBub2RlLT52YWx1ZSsrOyAvLyBDcmXImXRlbSBmcmVjdmVuyJthIGRhY8SDIGNoZWlhIGV4aXN0xIMKICAgICAgICByZXR1cm4gbm9kZTsKICAgIH0KCiAgICAvLyBDxIN1dGFyZSByZWN1cnNpdsSDCiAgICBOb2RlKiBzZWFyY2goTm9kZSogbm9kZSwgaW50IGtleSkgewogICAgICAgIGlmICghbm9kZSB8fCBub2RlLT5rZXkgPT0ga2V5KSByZXR1cm4gbm9kZTsKICAgICAgICBpZiAoa2V5IDwgbm9kZS0+a2V5KSByZXR1cm4gc2VhcmNoKG5vZGUtPmxlZnQsIGtleSk7CiAgICAgICAgcmV0dXJuIHNlYXJjaChub2RlLT5yaWdodCwga2V5KTsKICAgIH0KCiAgICAvLyBQYXJjdXJnZXJlIGluLW9yZGVyIHBlbnRydSBhIGFmaciZYSBmcmVjdmVuyJtlbGUKICAgIHZvaWQgaW5vcmRlcihOb2RlKiBub2RlKSB7CiAgICAgICAgaWYgKCFub2RlKSByZXR1cm47CiAgICAgICAgaW5vcmRlcihub2RlLT5sZWZ0KTsKICAgICAgICBzdGQ6OmNvdXQgPDwgbm9kZS0+a2V5IDw8ICIgYXBwZWFycyAiIDw8IG5vZGUtPnZhbHVlIDw8ICIgdGltZXNcbiI7CiAgICAgICAgaW5vcmRlcihub2RlLT5yaWdodCk7CiAgICB9CgpwdWJsaWM6CiAgICBCU1RNYXAoKSA6IHJvb3QobnVsbHB0cikge30KCiAgICAvLyBGdW5jyJtpZSBwdWJsaWPEgyBwZW50cnUgaW5zZXJhcmUKICAgIHZvaWQgaW5zZXJ0KGludCBrZXkpIHsKICAgICAgICByb290ID0gaW5zZXJ0KHJvb3QsIGtleSk7CiAgICB9CgogICAgLy8gRnVuY8ibaWUgcHVibGljxIMgcGVudHJ1IGEgb2LIm2luZSBmcmVjdmVuyJthCiAgICBpbnQgZ2V0KGludCBrZXkpIHsKICAgICAgICBOb2RlKiBub2RlID0gc2VhcmNoKHJvb3QsIGtleSk7CiAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT52YWx1ZSA6IDA7IC8vIDAgZGFjxIMgY2hlaWEgbnUgZXhpc3TEgwogICAgfQoKICAgIC8vIEFmaciZYXJlYSBmcmVjdmVuyJtlbG9yCiAgICB2b2lkIHByaW50KCkgewogICAgICAgIGlub3JkZXIocm9vdCk7CiAgICB9Cn07CgppbnQgbWFpbigpIHsKICAgIHN0ZDo6dmVjdG9yPGludD4gYXJyID0gezcsIDgsIDgsIDgsIDcsIDUsIDU1LCA1NSwgMTAxLCA0LCA3LCAxMDEsIDEsIDR9OwoKICAgIEJTVE1hcCBteU1hcDsKICAgIAogICAgLy8gSW5zZXLEg20gZmllY2FyZSBlbGVtZW50IGRpbiBhcnJheSDDrm4gYXJib3JlCiAgICBmb3IgKGludCBudW0gOiBhcnIpIHsKICAgICAgICBteU1hcC5pbnNlcnQobnVtKTsKICAgIH0KCiAgICAvLyBBZmnImcSDbSBmcmVjdmVuyJtlbGUKICAgIG15TWFwLnByaW50KCk7CgogICAgcmV0dXJuIDA7Cn0K