algorithm - 图和树的DFS区别

标签 algorithm data-structures

我试图理解一般图和树的 DFS 算法。我注意到打印出的节点顺序对于图形和树是不同的。

在 Graphs 中,我们打印父节点,然后打印子节点。

void Graph::DFS(int v)
{   
    // Mark the current node as visited and print it
    visited[v] = true;
    cout << v << " ";

    // Recur for all the vertices adjacent to this vertex
    vector<int>::iterator i;
    for (i = adj[v].begin(); i != adj[v].end(); ++i)
    if (!visited[*i])
        DFS(*i);

}

在树中,我们先打印子节点再打印父节点

void DFS(struct node *head)
{
    if (head)
    {
        if (head->left)
        {
            DFS(head->left);
        }
        if (head->right)
        {
            DFS(head->right);
        }
        printf("%d  ", head->a);
    }
}

我想知道为什么两者的顺序不同。应该一样吗?我认为我对算法的理解是错误的。有人可以纠正我吗?

最佳答案

遍历图中的节点时有两种变体:前序和后序。在二叉树中,还有另一种选择:有序。有区别:

  1. 预序:当前节点在处理它的邻居/子节点之前被处理。

  2. 后序:当前节点处理它的邻居/子节点后被处理。

  3. In-order:只适用于二叉树。首先处理左 child ,然后是当前节点,最后是右 child 。

不同的变体在不同的情况下很有用,例如遍历 BST in-order 将按顺序给出它的元素。

关于algorithm - 图和树的DFS区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31893924/

相关文章:

python - Fast NMS 算法抑制框不重叠

algorithm - 数据结构预处理给定的 N 点集并给定查询并行带输出所有点都位于带内

c# - 用于查找给定时间间隔内所有星期日和星期五的优化算法

algorithm - 如何从给定的列表中有效地构建 B+ 树?

c++ - 数组大小限制

python - 如果可能的话,将字符串列表转换为 float 。 - Python

algorithm - 给定n个矩形坐标,求k个矩形相交区域的面积?

algorithm - 增长率递增顺序

c - 指针采用什么样的数据结构?

java - 如何让我的 Java 程序终止?