Skip to content

Instantly share code, notes, and snippets.

@thinkphp
Last active July 6, 2026 11:16
Show Gist options
  • Select an option

  • Save thinkphp/c12baf14d5b179509d83917b04201445 to your computer and use it in GitHub Desktop.

Select an option

Save thinkphp/c12baf14d5b179509d83917b04201445 to your computer and use it in GitHub Desktop.
Introducere BSST

Introducere în Binary Search Tree (BST)

Un Binary Search Tree (arbore binar de căutare) este o structură de date arborescentă în care fiecare nod are cel mult doi copii (stânga și dreapta), respectând o proprietate de ordonare:

  • Toate valorile din subarborele stâng al unui nod sunt mai mici decât valoarea nodului.
  • Toate valorile din subarborele drept sunt mai mari (sau egale, în funcție de convenție).
  • Această regulă se aplică recursiv pentru fiecare subarbore.

De ce este util

Datorită acestei ordonări, operațiile de bază devin eficiente:

Operație Complexitate medie Complexitate în cel mai rău caz
Căutare (search) O(log n) O(n)
Inserare (insert) O(log n) O(n)
Ștergere (delete) O(log n) O(n)

Complexitatea "în cel mai rău caz" apare când arborele devine degenerat (practic o listă înlănțuită) — de exemplu dacă inserezi valori deja sortate (1, 2, 3, 4...). Din acest motiv există variante echilibrate (AVL, Red-Black Tree) care garantează O(log n) mereu.

Parcurgeri (traversals)

Cele trei parcurgeri clasice, ca în codul pe care l-am scris:

  • Inorder (stânga → nod → dreapta) → afișează valorile în ordine crescătoare.
  • Preorder (nod → stânga → dreapta) → util pentru a reconstrui arborele.
  • Postorder (stânga → dreapta → nod) → util pentru ștergerea completă a arborelui (se șterg copiii înainte de părinte).

Cazul ștergerii unui nod

Ștergerea are 3 situații:

  1. Nod frunză (fără copii) — se elimină direct.
  2. Un singur copil — nodul e înlocuit de copilul respectiv.
  3. Doi copii — nodul este înlocuit fie cu cel mai mare din subarborele stâng (ca în codul tău, funcția mostlyRight), fie cu cel mai mic din subarborele drept — ambele metode păstrează proprietatea de BST.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment