-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patharvoreAVL.py
86 lines (76 loc) · 2.94 KB
/
arvoreAVL.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
from noAVL import NoAVL
class ArvoreAVL:
def __init__(self):
self.raiz = None
def cadastrarCompra(self, cartao, compra):
if cartao.comprasAVL is None:
cartao.comprasAVL = NoAVL(compra)
else:
cartao.comprasAVL = self.inserirCompra(cartao.comprasAVL, compra)
def inserirCompra(self, no, compra):
if no is None:
return NoAVL(compra)
if compra.idcompra < no.compra.idcompra:
no.esquerda = self.inserirCompra(no.esquerda, compra)
else:
no.direita = self.inserirCompra(no.direita, compra)
no.altura = 1 + max(self.getAltura(no.esquerda),
self.getAltura(no.direita))
balanceamento = self.getBalanceamento(no)
if balanceamento > 1:
if compra.idcompra < no.esquerda.compra.idcompra:
return self.rotacaoDireita(no)
else:
no.esquerda = self.rotacaoEsquerda(no.esquerda)
return self.rotacaoDireita(no)
if balanceamento < -1:
if compra.idcompra > no.direita.compra.idcompra:
return self.rotacaoEsquerda(no)
else:
no.direita = self.rotacaoDireita(no.direita)
return self.rotacaoEsquerda(no)
return no
def getAltura(self, no):
if no is None:
return 0
return no.altura
def getBalanceamento(self, no):
if no is None:
return 0
return self.getAltura(no.esquerda) - self.getAltura(no.direita)
def rotacaoEsquerda(self, z):
y = z.direita
T2 = y.esquerda
y.esquerda = z
z.direita = T2
z.altura = 1 + max(self.getAltura(z.esquerda),
self.getAltura(z.direita))
y.altura = 1 + max(self.getAltura(y.esquerda),
self.getAltura(y.direita))
return y
def rotacaoDireita(self, y):
x = y.esquerda
T2 = x.direita
x.direita = y
y.esquerda = T2
y.altura = 1 + max(self.getAltura(y.esquerda),
self.getAltura(y.direita))
x.altura = 1 + max(self.getAltura(x.esquerda),
self.getAltura(x.direita))
return x
def exibirArvoreCompras(self, cartao):
if cartao.comprasAVL is None:
print("Nenhuma compra registrada para este cartão.")
else:
print("Compras registradas para o cartão:", cartao.numeroCartao)
self.buscaRecursiva(cartao.comprasAVL)
def buscaRecursiva(self, no):
if no is not None:
self.buscaRecursiva(no.esquerda)
compra = no.compra
print("ID da compra:", compra.idcompra)
print("Itens:", compra.itens)
print("Valor: R$", compra.valorCompra)
print("Data da compra:", compra.dataCompra)
print("--------------------")
self.buscaRecursiva(no.direita)