Guest User

Untitled

a guest
Mar 22nd, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.24 KB | None | 0 0
  1. class Vozlisce:
  2.  
  3. def __init__(self, kljuc=None):
  4. ''' Ustvari vozlišče drevesa:
  5. - Vozlisce() ustvari prazno vozlišče
  6. - Vozlisce(kljuc) ustvari vozlišče z danim podatkom ključ
  7. '''
  8. self.kljuc = kljuc
  9. self.levi = None
  10. self.desni = None
  11.  
  12.  
  13. class AVLDrevo:
  14.  
  15. def __init__(self):
  16. ''' Ustvari prazno AVL drevo. '''
  17. self.koren = None
  18. self.visina = -1
  19. self.ravnotezje = 0
  20.  
  21. def __repr__(self, zamik=''):
  22. if self.prazno():
  23. return 'AVLDrevo()'.format(zamik)
  24. elif self.koren.levi.prazno() and self.koren.desni.prazno():
  25. return 'AVLDrevo({1})'.format(zamik, self.koren.kljuc)
  26. else:
  27. return 'AVLDrevo({1},\n{0} levo = {2},\n{0} desno = {3})'.\
  28. format(
  29. zamik,
  30. self.koren.kljuc,
  31. self.koren.levi.__repr__(zamik + ' '),
  32. self.koren.desni.__repr__(zamik + ' ')
  33. )
  34.  
  35. def prazno(self):
  36. ''' Vrne True, če je drevo prazno, sicer vrne False. '''
  37. return self.koren is None
  38.  
  39. def pravilno(self, mini=-float("inf"), maxi=float("inf")):
  40. ''' vrne True, če je dvojiško drevo AVL drevo in False, če ni '''
  41. if self.prazno():
  42. return True
  43. if self.koren.kljuc < mini or self.koren.kljuc > maxi:
  44. return False
  45. return self.koren.levi.pravilno(mini, self.koren.kljuc - 1) and \
  46. self.koren.desni.pravilno(self.koren.kljuc + 1, maxi) and abs(self.ravnotezje) <= 1
  47.  
  48. def vstavi(self, kljuc):
  49. ''' vstavi nov podatek na ustrezno mesto v AVL drevesu '''
  50. if self.prazno():
  51. self.koren = Vozlisce(kljuc)
  52. self.koren.levi = AVLDrevo()
  53. self.koren.desni = AVLDrevo()
  54. elif kljuc < self.koren.kljuc:
  55. self.koren.levi.vstavi(kljuc)
  56. elif kljuc > self.koren.kljuc:
  57. self.koren.desni.vstavi(kljuc)
  58. self.visina = max(self.koren.levi.visina, self.koren.desni.visina) + 1
  59. self.ravnotezje = self.koren.levi.visina - self.koren.desni.visina
  60. self.popravi()
  61.  
  62. def popravi(self):
  63. pass # To metodo bomo implementirali kasneje.
Add Comment
Please, Sign In to add comment