Sunteți pe pagina 1din 3

Arborele binar de cutare indexat

1. Definire : Arbore binar de cutare indexat arbore binar de cutare fiecare nod are nc un cmp LeftSize n care se va reine numrul de descendeni din subarborele stng struct nod { nod *st, dr; int val, LeftSize; }

2. Exemplu: Cifrele n rou reprezint LeftSize pentru fiecare nod al arborelui

7 4
10

20

3
40

1
6

0
15

1 0
18

30

0
2 8

1 0

0
25

0
35

3. Indexul unui element este poziia sa la traversarea n inordine a arborelui binar de cutare. Pentru arborele din imagine: [2, 6, 7, 8, 10, 15, 18, 20, 25, 30, 35, 40] index(2) = 0 index(15) = 5 index(20) = 7 LeftSize(x) = index(x), relativ la elementele din subarborele stng cu rdcina n nodul x .

4. Cutarea unui element de index nr n arborele binar de cutare S presupunem c indexarea ncepe cu elementul aflat pe poziia 0 (ca n exemplu). Atunci, pentru prelucrarea nodului x, avem cazurile : dac nr=x.LeftSize atunci elementul cutat are valoarea x.val dac nr<x.LeftSize atunci elementul cutat este n subarborele stng al lui x, pe poziia nr (deci apelm recursiv cutarea pentru x.st) dac nr>x.LeftSize atunci elementul cutat se afl n subarborele drept al lui x i este pe poziia (nr - x.LeftSize-1) n acest subarbore Exemplu: nr=9

7 4
10

20
9>7

3
40

1
6

0
15

1 0
18

30

0
2 8

1 0

0
25

0
35

7 4
10

20

3
40

1
6

0
15

1 0
18

30

9-7-1=1<3

0
2 8

1 0

0
25

0
35

7 4
10

20

3
40

1
6

0
15
1=1

30

0
2 8

1 0

0
18

0
25

0
35

Deci, elementul cu indexul 9 este 30.

S-ar putea să vă placă și