我一直想在Ruby中實現二叉樹類,但我得到了stack level too deep
錯誤,但我似乎沒有使用任何遞歸在特定的一段代碼:實現二叉樹在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
編輯:我的問題有點偏離軌道。當前的代碼設置給了我在第8行的stack level too deep
錯誤但是,如果我聘請埃德S.的解決方案
@left = @right = nil
那麼<<
方法抱怨說:undefined method '<<' for nil:NilClass (NoMethodError)
在22行
任何人都可以建議如何解決這個問題?我的想法是,如果我能以某種方式告訴BinaryTree
類變量left
和right
屬於BinaryTree
(即它們的類型是BinaryTree
)的實例,那一切都會好的。我錯了嗎?
每次調用BinaryTree.new時間,它擊中了'initialize'方法,並呼籲另一BinaryTree.new,永遠重複。這就是爲什麼你的堆棧溢出 – Edmund