Ruby on rails 基于Rspec的Ruby递归深度搜索
我目前在理解和实施DFS方面遇到了一个问题,这是我目前面临的挑战Ruby on rails 基于Rspec的Ruby递归深度搜索,ruby-on-rails,ruby,recursion,rspec,Ruby On Rails,Ruby,Recursion,Rspec,我目前在理解和实施DFS方面遇到了一个问题,这是我目前面临的挑战#find方法假定取根和数据(分类为节点),如果存在匹配项,则返回标题。这是我目前拥有的,我能找到的唯一帮助是: Rspec我正试图通过 describe "#find(data)" do it "handles nil gracefully" do tree.insert(root, empire) tree.insert(root, mad_max_2) expect(tree.fin
#find
方法假定取根
和数据
(分类为节点),如果存在匹配项,则返回标题
。这是我目前拥有的,我能找到的唯一帮助是:
Rspec我正试图通过
describe "#find(data)" do
it "handles nil gracefully" do
tree.insert(root, empire)
tree.insert(root, mad_max_2)
expect(tree.find(root, nil)).to eq nil
end
it "properly finds a left node" do
tree.insert(root, pacific_rim)
expect(tree.find(root, pacific_rim.title).title).to eq "Pacific Rim"
end
it "properly finds a left-left node" do
tree.insert(root, braveheart)
tree.insert(root, pacific_rim)
expect(tree.find(root, pacific_rim.title).title).to eq "Pacific Rim"
end
it "properly finds a left-right node" do
tree.insert(root, donnie)
tree.insert(root, inception)
expect(tree.find(root, inception.title).title).to eq "Inception"
end
it "properly finds a right node" do
tree.insert(root, district)
expect(tree.find(root, district.title).title).to eq "District 9"
end
it "properly finds a right-left node" do
tree.insert(root, hope)
tree.insert(root, martian)
expect(tree.find(root, martian.title).title).to eq "The Martian"
end
it "properly finds a right-right node" do
tree.insert(root, empire)
tree.insert(root, mad_max_2)
expect(tree.find(root, mad_max_2.title).title).to eq "Mad Max 2: The Road Warrior"
end
end
我遇到的常见错误
BinarySearchTree#find(data) properly finds a left node
Failure/Error: expect(tree.find(root, pacific_rim.title).title).to eq "Pacific Rim"
NoMethodError:
undefined method `title' for "Pacific Rim":String
# ./binary_search_tree.rb:37:in `find'
# ./binary_search_tree_spec.rb:66:in `block (3 levels) in <top (required)>'
BinarySearchTree#find(data)正确地查找左侧节点
失败/错误:expect(tree.find(root,pacific_-rim.title).title)到eq“pacific-rim”
命名错误:
“环太平洋”的未定义方法“title”:字符串
#./binary\u search\u tree.rb:37:in'find'
#./binary\u search\u tree\u spec.rb:66:in'block(3级)in'
我希望返回数据
(节点),但不确定如何解释测试并获得正确的输出。感谢您的帮助和/或建议。谢谢。以下是您的查找方法:
def find(root, data)
if data == nil
return nil
elsif root.title == data
return data
else
left = find(root.left, data) if root.left
right = find(root.right, data) if root.right
left or right
end
end
您返回的是
数据
,它将是一个字符串,或者至少是在比较根目录时指示的字符串。title==数据
。您想返回节点本身。ding,呃……谢谢。这很管用,我看得太多了。递归很简单。谢谢
def find(root, data)
if data == nil
return nil
elsif root.title == data
return data
else
left = find(root.left, data) if root.left
right = find(root.right, data) if root.right
left or right
end
end