Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Node():
- def __init__(self,val):
- self.val=val
- self.right=None
- self.left=None
- self.parent=None
- class Tree():
- def __init__(self):
- self.root = None
- def insert(self,v):
- if self.root is None:
- self.root=Node(v)
- else:
- self._insert(v,self.root)
- def _insert(self,v,node):
- # if node.val is v:
- if node.val == v:#immagino che qui tu voglia fare una comparazione e vedere se l'intero assegnato a node.val è uguale all'intero assegnato a v. La keyword is non
- #si usa per questo motivo. si usa per vedere se due variabili si riferiscono allo stesso valore, non a due valori uguali!
- return False
- elif v < node.val:
- if node.left:
- self._insert(v,node.left)
- else:
- node.left=Node(v) #così crea direttamente un nuovo nodo
- node.left.parent=node
- else:
- if node.right:
- self._insert(v,node.right)
- else:
- node.right=Node(v)
- node.right.parent=node
- def print_tree(self):
- if self.root is not None:
- self._print_tree(self.root)
- def _print_tree(self,node):
- if node is not None:
- self._print_tree(node.left)
- print(str(node.val))
- self._print_tree(node.right)
- def isright(self,val):
- if self.root is not None:
- return self._isright(val,self.root)
- else:
- return None
- def _isright(self,val,node):
- print("fase 1")
- if node is None:
- node=self.root
- if self.root.val is val:#qui mi sembra che tu stia usando bene is
- print("la chiave è il root")
- else:
- if node.val < val :
- print("fase2")
- self._isright(val,node.right)
- if node.val > val :
- print("fase 3")
- self._isright(val,node.left)
- if (node.val==val and node is node.parent.right):
- print("fase 4")
- print("trovato destro")
- elif (node.val==val and node is node.parent.left):
- print("trovato sinistro")
- else: #aggiunta mia. Sempre meglio mettere un else
- print("Errore. Il nodo non è né sinistro né destro")
- def right(self,val): #definisci sempre una funzione func a cui passi, sotto lo stesso comando condizionale, una funzione _func. Va bene ma puoi usare
- if self.root is not None: #un decoratore per snellire il codice
- return self._right(val,self.root)
- else:
- return None
- #questa è la funzione che deve ritornare il figlio destro
- def _right(self,val,node):
- # if self.root.val is val: qua non hai bisogno di chiamare self.root se lo passi già come argomento
- if node.val is val:
- return node.right
- else: #qua esegue la ricerca direttamente nell'albero
- if node.val<val:
- print("destro")
- self._right(val,node.right)
- elif node.val>val:
- print("sinistro")
- self._right(val,node.left)
- elif node.val == val:
- print("trovato")
- print(str(node.right.val))
- # return node.right.val #questo ritorna sempre None
- return node.right.val #ora non più... Il return era male indentato. Per cui la funzione ritornava dei valori solo con l'ultimo elif, e None nelle altre
- #condizioni
- t=Tree()
- t.insert(1)
- t.insert(5)
- t.insert(4)
- t.insert(9)
- t.insert(8)
- t.insert(12)
- t.insert(2)
- print(t.right(9))
- t.print_tree()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement