我想知道一种快速算法来确定给定的图形是否是树。 This帖似乎处理它,但不是很清楚。根据这个,如果图是非循环的,那么它就是一棵树。如果你考虑显示有向和无向图的例子,在我看来只有1和4是树,但我认为3既不是循环也不是树。
所以我的问题是: 需要检查什么才能以有效的方式检查图表是否为有向图和无向图的图形?
领先一步看看,如果树存在,那么它是否是二叉树?
答案 0 :(得分:18)
对于有向图:
找到只有外边缘的顶点(如果有多个顶点或没有这样的顶点,则失败)。
从该顶点执行BFS或DFS。如果您遇到已经访问过的顶点,则它不是树。
如果你已经完成并且有未探索的顶点,那么它不是树 - 图表没有连接。
否则,它是一棵树。
要检查二叉树,另外检查每个顶点是否最多有2个传出边。
对于无向图:
检查一个简单深度优先搜索的循环(从任何顶点开始) - "If an unexplored edge leads to a node visited before, then the graph contains a cycle."如果有一个循环,则它不是树。
如果上面的过程留下了一些未经探索的顶点,则它不是树,因为它没有连接。
否则,它是一棵树。
要检查二叉树,还要检查所有顶点是否有1-3条边(一条到父级,两条到子级)。
检查根,即一个顶点是否包含1-2个边是不必要的,因为必须是非循环连接无向图中1-2边的顶点。
请注意,识别根通常不可能(在特殊情况下可能),因为在许多无向图中,如果我们要将其作为二叉树,则可以将多个节点作为根。 / p>
答案 1 :(得分:0)
如果给定无向图是树:
答案 2 :(得分:0)
以下两个条件成立时,无向图就是一棵树:
有以下三个条件成立时,有向图就是一棵树: