Files
BinarySearchTree/README.md

53 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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/postorder) 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
- **Preorder:** Rot → Vänster → Höger
- **Inorder:** Vänster → Rot → Höger (ger sorterad ordning för BST)
- **Postorder:** 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
- **Nullskydd 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.