Ruby递归DFS方法

Ruby recursive DFS method

我在深度优先搜索算法实现的递归方法方面遇到了一些麻烦。这是二叉树照片:

该方法适用于树的右侧 (55, 89, 144),但当它到达左侧时 returns nil,即使它放置 "yes"。那么,代码有什么问题呢?该节点是 Node class 的一个实例,它具有值(整数)并链接到左右子节点(Node class 的其他实例),如果它没有来自该节点的子节点,则为 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

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

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

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