Binary Search Tree ile Hızlı Arama: C++ Uygulaması

Binary Search Tree (BST), sıralı veri depolama ve hızlı arama için ideal bir veri yapısıdır. Dengeli bir ağaçta arama O(log n) zamanda gerçekleşirken, kötü durumda O(n) olabilir. Burada dengeli bir BST ile optimal performans sağlayacağız.

BST'nin temel ilkesi basit: sol alt ağaçtaki tüm değerler düğümden küçük, sağ alt ağaçtakiler büyüktür. Bu özellik, ikili arama yaparak arama hızını dramatik şekilde artırır.

Aşağıda düğüm ekleme, arama ve ağacı yazdırma işlemlerini içeren tam bir implementasyon var:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1 <iostream>
2using namespace std;
3
4struct Node {
5int data;
6Node* left;
7Node* right;
8
9Node(int val): data(val), left(nullptr), right(nullptr) {}
10};
11
12class BST {
13private:
14Node* root;
15
16Node* insert(Node* node, int val) {
17if (node == nullptr) return new Node(val);
18
19if (val < node->data)
20node->left = insert(node->left, val);
21else if (val > node->data)
22node->right = insert(node->right, val);
23
24return node;
25}
26
27bool search(Node* node, int val) {
28if (node == nullptr) return false;
29
30if (val == node->data) return true;
31else if (val < node->data) return search(node->left, val);
32else return search(node->right, val);
33}
34
35void inorder(Node* node) {
36if (node == nullptr) return;
37inorder(node->left);
38cout << node->data << " ";
39inorder(node->right);
40}
41
42public:
43BST(): root(nullptr) {}
44
45void insert(int val) {
46root = insert(root, val);
47}
48
49bool search(int val) {
50return search(root, val);
51}
52
53void display() {
54inorder(root);
55cout << endl;
56}
57};
58
59int main() {
60BST tree;
61
62// Veri ekleme
63tree.insert(50);
64tree.insert(30);
65tree.insert(70);
66tree.insert(20);
67tree.insert(40);
68tree.insert(60);
69tree.insert(80);
70
71cout << "Ağaç (inorder): ";
72tree.display();
73
74// Arama işlemleri
75cout << "40 aranıyor: " << (tree.search(40)? "Bulundu": "Bulunamadı") << endl;
76cout << "25 aranıyor: " << (tree.search(25)? "Bulundu": "Bulunamadı") << endl;
77cout << "80 aranıyor: " << (tree.search(80)? "Bulundu": "Bulunamadı") << endl;
78
79return 0;
80}

Beklenen Çıktı:

1Ağaç (inorder): 20 30 40 50 60 70 80
240 aranıyor: Bulundu
325 aranıyor: Bulunamadı
480 aranıyor: Bulundu

Kod, recursive yapı kullanarak ekleme ve aramayı gerçekleştirir. `insert()` fonksiyonu yeni değeri doğru konuma yerleştirir, `search()` ise logaritmik zamanda sonuç döner.

Sık yapılan hata: Eğer veriler sıralı şekilde eklenirse (1, 2, 3, 4...), ağaç dejenere olur ve arama O(n) olur. Bunu önlemek için AVL ağacı veya Red-Black Tree gibi dengeli yapılar kullan.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz