【问题标题】:Is pre-order traversal a depth-first method?前序遍历是深度优先的方法吗?
【发布时间】:2017-01-22 15:20:14
【问题描述】:

前序遍历是深度优先算法吗?我在下面的搜索中使用它。我在下面包含了代码。

public bool DFS1(int value, BSTNode root)
{    // Pre-order search

    if (root == null)
        return false;

    if (root.data == value)
    {
        Console.WriteLine("found");
        return true;
    }

    DFS1(value, root.left); //vist the left node
    return DFS1(value, root.right); // vist the right node.
}

【问题讨论】:

  • 您忽略了左递归的结果。如果左搜索成功,则不需要右搜索。
  • @A.Sarid 基本问题是重复的。然而,OP 在解决该问题的双重递归方面存在问题(恕我直言)保证这个问题保持开放。

标签: algorithm recursion binary-search-tree depth-first-search


【解决方案1】:

是的,它是深度优先的:在查看原始根的右节点之前,您将完全完成左子树。但是,您需要考虑左搜索的结果。目前,如果最右边的节点具有目标值,这将返回 true

return DFS1(value, root.left) or
       DFS1(value, root.right)

大部分编译器都会对此进行优化(短路),这样如果左边返回true,右边就不会执行。如果没有,你可以自己写:

if (DFS1(value, root.left))
    return true;
else
    return DFS1(value, root.right);

【讨论】:

  • @Prune- 好收获。我不知道如何在递归两次调用后返回,因为结尾代码处的“return false”返回了不正确的值。有没有不使用 OR 条件的另一种返回方式?
  • 很高兴能提供帮助。请记住接受您最喜欢的答案,以便 Stack Overflow 可以正确地退出该问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-10
  • 1970-01-01
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多