11
© Odjel za Informa/ku PMFST Strukture podataka i algoritmi 2012/2013 STRUKTURE PODATAKA I ALGORITMI uređeno binarno stablo obilasci provjera rotacije balansiranost

Uredeno Binarno Stablo

Embed Size (px)

DESCRIPTION

Strukture podataka i algoritmi

Citation preview

Page 1: Uredeno Binarno Stablo

©  Odjel  za  Informa/ku  -­‐  PMFSTStrukture  podataka  i  algoritmi 2012/2013

STRUKTURE  PODATAKA  I  ALGORITMI

uređeno  binarno  stablo

obilasci

provjera

rotacije

balansiranost

Page 2: Uredeno Binarno Stablo

©  Odjel  za  Informa/ku  -­‐  PMFSTStrukture  podataka  i  algoritmi /  11

UREĐENO  BINARNO  STABLO  -­‐  OBILASCI

• Obilazak  u  bilo  kojoj  strukturi  podataka  podrazumijeva  proces  “posjećivanja”  svakog  čvora  u  strukturi  točno  jednom,  a  s  ciljem  utvrđivanja  vrijednosD  u  tom  čvoru.

• U  vezanoj  lisD  ili  nizu,  obilazak  je  uvijek  isD

-­‐ kreni  od  prvog  čvora

-­‐ posjeD  ga

-­‐ pređi  na  idući  čvor  

-­‐ i  tako  sve  dok  ne  dođemo  do  kraja

• U  stablu  je,  baš  radi  prirode  same  strukture,  obići  čvorove  moguće  na  više  načina.  

2

Page 3: Uredeno Binarno Stablo

©  Odjel  za  Informa/ku  -­‐  PMFSTStrukture  podataka  i  algoritmi /  11

UREĐENO  BINARNO  STABLO  -­‐  OBILASCI

• Počevši  s  korijenom  stabla,  moguća  su  tri  različita  koraka

-­‐ posjeDD  čvor

-­‐ oDći  do  lijevog  djeteta

-­‐ oDći  do  desnog  djeteta

• Ovisno  o  tome  razmatraju  li  se  prvo  potomci  po  dubini  (sin/unuk/praunuk)  ili  potomci  na  istoj  razini  (braća)  razlikujemo  pretraživanje

-­‐ po  dubini

-­‐ po  širini

• Pretraživanje  po  dubini  se  još  dodatno  dijeli  na

-­‐ preorder  -­‐  korijen  se  razmotri  prije  lijevog  djeteta

-­‐ inorder  -­‐  korijen  se  razmotri  nakon  lijevog  a  prije  desnog  djeteta

-­‐ postorder  -­‐  korijen  se  razmotri  nakon  lijevog  i  nakon  desnog  djeteta

3

Page 4: Uredeno Binarno Stablo

©  Odjel  za  Informa/ku  -­‐  PMFSTStrukture  podataka  i  algoritmi /  11

UREĐENO  BINARNO  STABLO  -­‐  OBILASCI

• Preorder

-­‐ posjeD

-­‐ idi  lijevo

-­‐ idi  desno

• Inorder

-­‐ idi  lijevo

-­‐ posjeD

-­‐ idi  desno

• Postorder

-­‐ idi  lijevo

-­‐ idi  desno

-­‐ posjeD

4

Page 5: Uredeno Binarno Stablo

©  Odjel  za  Informa/ku  -­‐  PMFSTStrukture  podataka  i  algoritmi /  11

UREĐENO  BINARNO  STABLO  -­‐  OBILASCI

• Pretraživanje  po  širini  podrazumijeva  da  se  razmotre  svi  čvorovi  na  istoj  razini  prije  prelaska  na  nižu  razinu

• Također  podrazumijeva  upotrebu  pomoćne  strukture  podataka,  i  to  najčešće  stoga,  a  zgodno  je  i  prvo  odrediD  visinu/dubinu  stabla

5

levelorderAux(tree, level) begin if tree is null, return;

if level is 1, then print(tree.root); else if level greater than 1, then levelorderAux(tree.left_subtree, level-1); levelorderAux(tree.right_subtree, level-1); endif end levelorder(tree) begin for d = 1 to height(tree) levelorderAux(tree, d); endfor end

Page 6: Uredeno Binarno Stablo

©  Odjel  za  Informa/ku  -­‐  PMFSTStrukture  podataka  i  algoritmi /  11

UREĐENO  BINARNO  STABLO  -­‐  PROVJERA

• Uređeno  binarno  stablo  po  svojoj  definiciji  

-­‐ ne  dozvoljava  unos  duplikata

-­‐ u  lijevoj  grani  podrazumijeva  čvor  “manji”  od  korijena

-­‐ u  desnoj  grani  podrazumijeva  čvor  “veći”  od  korijena

• Kako  provjeriD  za  neko  binarno  stablo  je  li  ono  uređeno?

6

Page 7: Uredeno Binarno Stablo

©  Odjel  za  Informa/ku  -­‐  PMFSTStrukture  podataka  i  algoritmi /  11

UREĐENO  BINARNO  STABLO  -­‐  PROVJERA

• Uređeno  binarno  stablo  po  svojoj  definiciji  

-­‐ ne  dozvoljava  unos  duplikata

-­‐ u  lijevoj  grani  podrazumijeva  čvor  “manji”  od  korijena

-­‐ u  desnoj  grani  podrazumijeva  čvor  “veći”  od  korijena

• Kako  provjeriD  za  neko  binarno  stablo  je  li  ono  uređeno?

-­‐ ako  je  minimum  lijeve  grane  veći  od  trenutnog  korijena  -­‐  ne  valja

-­‐ ako  je  maksimum  desne  grane  manji  od  trenutnog  korijena  -­‐  ne  valja

-­‐ ako  lijevo  podstablo  nije  uređeno  -­‐  ne  valja

-­‐ ako  desno  podstablo  nije  uređeno  -­‐  ne  valja

7

Page 8: Uredeno Binarno Stablo

©  Odjel  za  Informa/ku  -­‐  PMFSTStrukture  podataka  i  algoritmi /  11

UREĐENO  BINARNO  STABLO  -­‐  ROTACIJA

• Rotacija  je  operacija  na  binarnom  stablu  koja  mijenja  strukturu  ali  ne  utječe  na  poredak  čvorova.

• Rotacija  jedan  čvor  pomiče  na  gornju  razinu  a  drugog  pomiče  na  donju.

• KorisD  se  za  oblikovanje  stabla,  posebice  za  smanjenje  njegove  ukupne  visine.

-­‐ ovo  za  rezultat  ima  poboljšanje  u  performansama  mnogih  operacija  nad  binarnim  stablom

• Razlikujemo  lijevu  i  desnu  rotaciju  

8

Page 9: Uredeno Binarno Stablo

©  Odjel  za  Informa/ku  -­‐  PMFSTStrukture  podataka  i  algoritmi /  11

UREĐENO  BINARNO  STABLO  -­‐  DESNA  ROTACIJA

9

Page 10: Uredeno Binarno Stablo

©  Odjel  za  Informa/ku  -­‐  PMFSTStrukture  podataka  i  algoritmi /  11

UREĐENO  BINARNO  STABLO  -­‐  LIJEVA  ROTACIJA

10

Page 11: Uredeno Binarno Stablo

©  Odjel  za  Informa/ku  -­‐  PMFSTStrukture  podataka  i  algoritmi /  11

UREĐENO  BINARNO  STABLO  -­‐  BALANSIRANOST

• Za  stablo  kažemo  da  je  balansirano  ako  za  svaki  njegovo  čvor,  apsolutna  razlika  u  visini  njegovog  lijevog  i  desnog  podstabla  nije  veća  od  1

• Stabla  se  mogu  balansiraD

-­‐ pri  unosu  (više  o  tome  idući  put)

-­‐ naknadno  (upotrebom  rotacija)

• Kako  provjeriD  je  li  stablo  balansirano?

11