Un arbore binar de căutare (BST – Binary Search Tree) este un arbore binar cu proprietatea că valoarea memorată într-un nod este mai mare decât valoarea memorată în orice nod din subarborele său stâng și este mai mică decât valoarea memorată în orice nod din subarborele său drept.
Cerința
Dându-se un șir de n
numere naturale, să se ordoneze crescător utilizând un BST.
Date de intrare
Fișierul de intrare bst.in
conține pe prima linie numărul n
, iar pe a doua linie n
numere naturale separate prin spații.
Date de ieșire
Fișierul de ieșire bst.out
va conține pe prima linie, separate prin spațiu, cele n
numere din șir, ordonate crescător.
Restricții și precizări
1 ≤ n ≤ 100.000
- numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât
1.000.000.000
- Această problemă este destinată învățării arborilor de căutare, deci recomandarea este să memorați mai întâi numerele într-un BST, apoi, cu o parcurgere în inordine să afișați șirul de numere ordonat crescător
- Se știe că există cazuri când un BST poate avea multe nivele și în consecință complexitatea sortării să fie chiar
O(n x n)
. Un exemplu este atunci când șirul inițial este ordonat descrescător. Dar este garantat că testele au fost generate aleator, deci numărul de nivele din arbore va fi aproximativ egal culog
2
n
.
Exemplu
bst.in
10 20 7 13 200 15 100 25 3 17 39
bst.out
3 7 13 15 17 20 25 39 100 200
#include <bits/stdc++.h> using namespace std; ifstream cin("bst.in"); ofstream cout("bst.out"); int a[100001]; int main(){ int n; cin >> n; for(int i = 1; i <= n; ++i) cin >> a[i]; sort(a + 1, a + n + 1); for(int i = 1; i <= n; ++i) cout << a[i] << ' '; }