不会发生Ruby中二进制搜索树实现中的递归调用

时间:2016-10-29 20:08:32

标签: ruby recursion

我在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

1 个答案:

答案 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