que he estado tratando de poner en práctica la clase BinaryTree en Ruby, pero estoy consiguiendo el error stack level too deep
, aunque no parece que haya ninguna utilizando la recursividad en ese pedazo de código en particular:Ejecución Binary Tree en Ruby
1. class BinaryTree
2. include Enumerable
3.
4. attr_accessor :value
5.
6. def initialize(value = nil)
7. @value = value
8. @left = BinaryTree.new # stack level too deep here
9. @right = BinaryTree.new # and here
10. end
11.
12. def empty?
13. (self.value == nil) ? true : false
14. end
15.
16. def <<(value)
17. return self.value = value if self.empty?
18.
19. test = self.value <=> value
20. case test
21. when -1, 0
22. self.right << value
23. when 1
24. self.left << value
25. end
26. end # <<
27.
28. end
Editar: Mi pregunta ha ido un poco fuera de la pista. El ajuste del código actual me da el error stack level too deep
en la línea 8. Sin embargo, si yo empleo solución de Ed S.
@left = @right = nil
entonces el método <<
se queja diciendo: undefined method '<<' for nil:NilClass (NoMethodError)
en la línea 22.
Podría alguien sugerir cómo resolver esto? Mi idea es que si de alguna manera pudiera decir a la clase BinaryTree
que las variables left
y right
son de instancias de BinaryTree
(es decir, su tipo es BinaryTree
) todo estaría bien. ¿Me equivoco?
Cada vez que llame BinaryTree.new, se golpea el método 'initialize' y pide otra BinaryTree.new, y repite siempre. Es por eso que tu pila está desbordando – Edmund