Ruby中二进制搜索树实现中的递归调用不会发生
我已经用Ruby实现了BST。迭代方法工作得很好,但是,尝试为Ruby中二进制搜索树实现中的递归调用不会发生,ruby,recursion,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)
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
def insert_rec(节点,值)
如果node.nil?
return Node.new(value,nil,nil)
elsif值node.value
node.right | |=插入_rec(node.right,值)
其他的
#要回去吗?
结束
结束
对于上面的代码,我可以调用insert
For>3个数字,但是我总是有一个最大深度为2的树
谢谢:/
Ronen如前所述,您没有保留创建超过前两个级别的节点的结果,因为Ruby会按值传递,并且不会返回更新的
节点
对象。如果从赋值中删除|
,并从递归中返回当前节点,则此操作有效:
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
def insert_rec(节点,值)
如果node.nil?
node=node.new(值,nil,nil)
elsif值node.value
node.right=插入记录(node.right,值)
结束
节点
结束
如前所述,您没有保留创建超过前两个级别的节点的结果,因为Ruby会传递值,并且不会返回更新的节点
对象。如果从赋值中删除|
,并从递归中返回当前节点,则此操作有效:
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
def insert_rec(节点,值)
如果node.nil?
node=node.new(值,nil,nil)
elsif值node.value
node.right=插入记录(node.right,值)
结束
节点
结束
请显示您的类节点
。感谢您的回复,节点
只是一个结构Node=Struct.new(:value,:left,:right)
any?:(bumpingRonen,我今晚再看一看。请给你的班级看一下Node
。谢谢你的回答,Node
只是一个结构;Node=struct.new(:value,:left,:right)
有人吗?:(bumpingRonen,我今晚再看一看。