【问题标题】:Ruby recursive DFS methodRuby递归DFS方法
【发布时间】:2015-07-02 18:56:35
【问题描述】:

深度优先搜索算法实现的递归方法有一些问题。这是二叉树的照片:

该方法适用于树的右侧 (55, 89, 144),但当涉及到左侧时它返回 nil,即使它输入“yes”。那么,代码有什么问题?该节点是 Node 类的一个实例,它具有值(整数)并链接到左右子节点(Node 类的其他实例),如果它没有来自该侧的子节点,则为 nil。

方法代码如下:

def depth_first_search(node, target)
    if node.value == target
        puts "yes"
        return node
    end
    depth_first_search(node.child_left, target) if node.child_left
    depth_first_search(node.child_right, target) if node.child_right
end

【问题讨论】:

    标签: ruby-on-rails ruby recursion depth-first-search


    【解决方案1】:

    因为depth_first_search(node.child_left, target) 不是你方法的最后一行,它的值永远不会被返回。如果它的值不是nil,你需要返回它的值。以下是解决问题的一种方法的示例:

    def depth_first_search(node, target)
        if node.value == target
            puts "yes"
            return node
        end
        left = depth_first_search(node.child_left, target) if node.child_left
        right = depth_first_search(node.child_right, target) if node.child_right
        left or right
    end
    

    请注意,即使在左子树上找到正确的节点,此示例也会搜索右子树,这是低效的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-10
      • 2015-02-27
      • 2015-01-17
      • 2014-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多