gpt4 book ai didi

algorithm - 图和树的DFS区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:57:30 24 4
gpt4 key购买 nike

我试图理解一般图和树的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com