Advertisement
kikulacho

risposta

Oct 31st, 2019
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.44 KB | None | 0 0
  1. class Node():
  2.   def __init__(self,val):
  3.     self.val=val
  4.     self.right=None
  5.     self.left=None
  6.     self.parent=None
  7.  
  8.  
  9. class Tree():
  10.   def __init__(self):
  11.     self.root = None
  12.  
  13.   def insert(self,v):
  14.     if self.root is None:
  15.       self.root=Node(v)
  16.     else:
  17.       self._insert(v,self.root)
  18.  
  19.   def _insert(self,v,node):
  20. #    if node.val is v:
  21.     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
  22.                      #si usa per questo motivo. si usa per vedere se due variabili si riferiscono allo stesso valore, non a due valori uguali!
  23.       return False
  24.     elif v < node.val:
  25.       if node.left:
  26.        self._insert(v,node.left)
  27.       else:
  28.         node.left=Node(v)       #così crea direttamente un nuovo nodo
  29.         node.left.parent=node
  30.     else:
  31.       if node.right:
  32.        self._insert(v,node.right)
  33.       else:
  34.         node.right=Node(v)
  35.         node.right.parent=node
  36.        
  37.        
  38.   def print_tree(self):
  39.      if self.root is not None:
  40.        self._print_tree(self.root)
  41.  
  42.   def _print_tree(self,node):
  43.     if node is not None:
  44.       self._print_tree(node.left)
  45.       print(str(node.val))
  46.       self._print_tree(node.right)
  47.  
  48.   def isright(self,val):
  49.     if self.root is not None:
  50.       return self._isright(val,self.root)
  51.     else:
  52.       return None
  53.  
  54.   def _isright(self,val,node):
  55.     print("fase 1")
  56.    
  57.     if node is None:
  58.       node=self.root
  59.    
  60.     if self.root.val is val:#qui mi sembra che tu stia usando bene is
  61.       print("la chiave è il root")
  62.  
  63.     else:
  64.       if node.val < val :
  65.         print("fase2")
  66.         self._isright(val,node.right)
  67.  
  68.       if node.val > val :
  69.         print("fase 3")
  70.         self._isright(val,node.left)
  71.  
  72.       if (node.val==val and node is node.parent.right):
  73.         print("fase 4")
  74.         print("trovato destro")
  75.        
  76.       elif (node.val==val and node is node.parent.left):
  77.         print("trovato sinistro")
  78.       else: #aggiunta mia. Sempre meglio mettere un else
  79.         print("Errore. Il nodo non è né sinistro né destro")
  80.  
  81.   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
  82.     if self.root is not None:       #un decoratore per snellire il codice
  83.       return self._right(val,self.root)
  84.     else:
  85.       return None
  86.                                     #questa è la funzione che deve ritornare il figlio destro
  87.   def _right(self,val,node):
  88. #    if self.root.val is val: qua non hai bisogno di chiamare self.root se lo passi già come argomento
  89.     if node.val is val:
  90.       return node.right
  91.     else:                           #qua esegue la ricerca direttamente nell'albero
  92.       if node.val<val:
  93.         print("destro")
  94.         self._right(val,node.right)
  95.      
  96.       elif node.val>val:
  97.         print("sinistro")
  98.         self._right(val,node.left)
  99.  
  100.       elif node.val == val:
  101.         print("trovato")
  102.         print(str(node.right.val))
  103. #        return node.right.val       #questo ritorna sempre None
  104.       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
  105.                                   #condizioni
  106.  
  107.  
  108. t=Tree()
  109. t.insert(1)
  110. t.insert(5)
  111. t.insert(4)
  112. t.insert(9)
  113. t.insert(8)
  114. t.insert(12)
  115. t.insert(2)
  116. print(t.right(9))
  117.  
  118. t.print_tree()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement