fork download
  1. class No:
  2. def __init__(self, dado):
  3. self.esq = None
  4. self.dir = None
  5. self.dado = dado
  6.  
  7. def __str__(self):
  8. s = '(' + str(self.dado) + ','
  9. if self.esq != None:
  10. s += str(self.esq) + ','
  11. else:
  12. s += 'X,'
  13. if self.dir != None:
  14. s += str(self.dir) + ')'
  15. else:
  16. s += 'X)'
  17. return s
  18.  
  19. class Arvore:
  20. def __init__(self):
  21. self.raiz = None
  22. def pegarRaiz(self):
  23. return self.raiz
  24.  
  25. def inserir(self, val):
  26. if self.raiz == None:
  27. self.raiz = No(val)
  28. else:
  29. self._inserir(val, self.raiz)
  30.  
  31. def _inserir(self, val, node):
  32. if val < node.dado:
  33. if node.esq != None:
  34. self._inserir(val, node.esq)
  35. node.esq.pai = node
  36. else:
  37. node.esq = No(val)
  38. else:
  39. if node.dir != None:
  40. self._inserir(val, node.dir)
  41. node.dir.pai = node
  42. else:
  43. node.dir = No(val)
  44.  
  45. def resp(self):
  46. if self.raiz != None:
  47. return self._resp(self.raiz)
  48.  
  49. def _resp(self, node):
  50. aux_esq = 0
  51. aux_dir = 0
  52. if node.esq != None:
  53. aux_esq = self._resp(node.esq)
  54. if node.dir != None:
  55. aux_dir = self._resp(node.dir)
  56. if (node.esq != None) or (node.dir != None):
  57. return 1 + aux_esq + aux_dir
  58. else:
  59. return 0
  60.  
  61. def __str__(self):
  62. if self.raiz != None:
  63. return str(self.raiz)
  64. else:
  65. return 'X'
  66.  
  67. T = Arvore()
  68. T.inserir(15)
  69. T.inserir(9)
  70. T.inserir(5)
  71. T.inserir(12)
  72. T.inserir(20)
  73. print(T.resp())
  74. print(T)
Success #stdin #stdout 0.02s 9372KB
stdin
Standard input is empty
stdout
2
(15,(9,(5,X,X),(12,X,X)),(20,X,X))