我正在学习二叉树,并尝试编写一种递归方法,在给定排序数组时构建平衡二叉树。我陷入了溢出状态,并没有确切地看到我做错了什么以及如何解决。一些指导会很有帮助。有问题的方法是
#build_balanced_tree(array)
,生成可重现示例的所有相关代码如下:
class Node
attr_accessor :value, :left, :right
def initialize(value)
@value = value
@left = nil
@right = nil
end
end
class Tree
attr_reader :array
attr_accessor :root
def initialize
@array = nil
@root = nil
end
def build_balanced_tree(array)
return if array.empty?
array_mid_index = (array.length - 1) / 2
self.root = Node.new(array[array_mid_index])
self.root.left = build_balanced_tree(array[0..(array_mid_index - 1)])
self.root.right = build_balanced_tree(array[(array_mid_index + 1)..(array.length - 1)])
return root
end
end
array = [1, 4, 7, 13, 65, 97]
tree = Tree.new
p tree.build_balanced_tree(array)
这个错误信息;
:in 'new': stack level too deep (SystemStackError)
在代码第一次到达 self.root.left = ...
行时抛出。
我怀疑部分问题可能是我的递归方法正在设置
self.root
并且因为 @root
被显式命名,所以它递归地不断覆盖自己,但我无法完全想象如何在制作时匿名化节点创建和值设置确定 @root
在第一次迭代时设置。此代码也可能存在多个其他问题,我将不胜感激。谢谢。