如何验证树中是否有圆圈?

SiL*_*oNG 1 directed-graph directed-acyclic-graphs data-structures

这是一棵树:

  1. 会有一个根.

  2. 每个树节点都有零个或多个子节点.

  3. 允许两个节点指向同一个子节点.比如,节点A和节点B都有子C.

但是,禁止

节点A是节点B的后代,节点B是节点A的后代.

一个被禁止的案例是

节点A有一个子节点C和节点D,

Node C和D都有一个子节点E,

节点E有一个孩子A.

问题是,如何以最快的方式确定这个圈子?

更新:我意识到这是在有向图中找到任何循环.刚才我设法想出了类似于Tarjan算法的解决方案.

感谢您的评论.

Dav*_*itt 5

做一个深度优先搜索在树.如果您在任何时候发现已经在回溯堆栈中的节点,则会有一个圆圈.