我在Ruby中实现了BST。迭代方法工作得很好,但是,尝试实现insert
方法的递归实现似乎不起作用。
出于某种原因,只有一个递归调用(即深度)。
这是方法;
def insert_rec(node, value)
if node.nil?
return Node.new(value, nil, nil)
elsif value < node.value
node.left ||= insert_rec(node.left, value)
elsif value > node.value
node.right ||= insert_rec(node.right, value)
else
# TODO return?
end
end
对于上面的代码,我可以将insert
称为&gt; 3个数字,但是我总是会有一个深度最大为2的树。
谢谢:/ RONEN
答案 0 :(得分:0)
正如所写的那样,您并没有保留创建节点超过前几个级别的结果,因为Ruby会按值传递并且您不会返回更新的Node
对象。如果您从作业中移除||
并且从递归中返回当前Node
,则此方法有效:
def insert_rec(node, value)
if node.nil?
node = Node.new(value, nil, nil)
elsif value < node.value
node.left = insert_rec(node.left, value)
elsif value > node.value
node.right = insert_rec(node.right, value)
end
node
end