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:
1#include <iostream>2using namespace std;34struct Node {5int data;6Node* left;7Node* right;89Node(int val): data(val), left(nullptr), right(nullptr) {}10};1112class BST {13private:14Node* root;1516Node* insert(Node* node, int val) {17if (node == nullptr) return new Node(val);1819if (val < node->data)20node->left = insert(node->left, val);21else if (val > node->data)22node->right = insert(node->right, val);2324return node;25}2627bool search(Node* node, int val) {28if (node == nullptr) return false;2930if (val == node->data) return true;31else if (val < node->data) return search(node->left, val);32else return search(node->right, val);33}3435void inorder(Node* node) {36if (node == nullptr) return;37inorder(node->left);38cout << node->data << " ";39inorder(node->right);40}4142public:43BST(): root(nullptr) {}4445void insert(int val) {46root = insert(root, val);47}4849bool search(int val) {50return search(root, val);51}5253void display() {54inorder(root);55cout << endl;56}57};5859int main() {60BST tree;6162// Veri ekleme63tree.insert(50);64tree.insert(30);65tree.insert(70);66tree.insert(20);67tree.insert(40);68tree.insert(60);69tree.insert(80);7071cout << "Ağaç (inorder): ";72tree.display();7374// Arama işlemleri75cout << "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;7879return 0;80}Beklenen Çıktı:
1Ağaç (inorder): 20 30 40 50 60 70 80240 aranıyor: Bulundu325 aranıyor: Bulunamadı480 aranıyor: BulunduKod, 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.
0 yorum