# Binärt sökträd (C++) Ett enkelt projekt som implementerar ett **binärt sökträd (BST)** i C++. Koden innehåller grundläggande operationer som insättning, sökning, traversering (pre/in/post‑order) samt borttagning av noder. > **Notera:** I den kod som följde med finns referenser till `defs.h` samt typerna `dataType`, `ptrType` och klassen/structen `treeNode` som **inte** följde med i uppladdningen. README:n nedan utgår från hur gränssnittet ser ut i `tree.h`/`tree.cpp` och beskriver hur du kan komplettera. ### `tree.h` Deklarerar klassen `treeClass` med: - `ptrType root` – pekare till rotnoden - `seek`, `insert`, `del`, `delRoot`, `delLeft` – kärnoperationer - Traversering: `preOrder`, `inOrder`, `postOrder` - `save` – skriver trädets noder till en ström ### `tree.cpp` Definitioner för metoderna ovan. Använder `defs.h`, `dataType`, `ptrType` och `treeNode`: - `treeNode` förväntas vara en nod med fälten `data`, `left`, `right`. - `dataType` är datatypen som lagras i trädet (t.ex. `int` eller en struct med jämförelseoperatorer). - `ptrType` är sannolikt `treeNode*`. ## Bygga & köra ### Med g++ ```bash g++ -std=c++17 -O2 -Wall -Wextra -o bst main.cpp tree.cpp ./bst ``` ## Traverseringar - **Pre‑order:** Rot → Vänster → Höger - **In‑order:** Vänster → Rot → Höger (ger sorterad ordning för BST) - **Post‑order:** Vänster → Höger → Rot ## Borttagning (översikt) `del` hittar noden att ta bort, `delRoot` hanterar tre fall: 1. **Bladnod** → delete, sätt pekaren till `nullptr`. 2. **En ensam höger- eller vänstergren** → flytta upp barnpekaren. 3. **Två barn** → hämta minsta värdet i höger delträd (via `delLeft`), ersätt data och ta bort den noden. ## Kända förbättringar - **Null‑skydd i `del`**: Kontrollera att `root` inte är `nullptr` innan jämförelser. - **`isEmpty`** kan returnera `root == nullptr` direkt. - **Konstkorrekthet**: Markera lämpliga metoder som `const` där möjligt. - **Separera I/O**: Låt traversering skriva till en ström (`std::ostream&`) istället för `std::cout` direkt.