这是一棵树:
会有一个根。
每个树节点都有零个或多个子节点。
- 醇>
允许两个节点指向同一个子节点。比如,节点A 节点B有子C。
但是,禁止这样做,
节点A是节点B的后代,并且 节点B是节点A的后代。
一个被禁止的案例是
节点A有一个子节点C和节点D,
节点C和D都有一个子节点E,
节点E的孩子为A。
问题是,如何以最快的方式确定这个圈子?
更新:我意识到这是在有向图中找到任何循环。刚才我设法想出了一个类似于Tarjan算法的解决方案。
感谢您的评论。
答案 0 :(得分:5)
通过树做Depth First Search。如果您在任何时候发现已经在回溯堆栈中的节点,则会有一个圆圈。
答案 1 :(得分:0)
圆圈可以使用2个指针找到并以不同的间隔推进它们。最终指针将匹配,表示循环,或“更快”的指针将到达然后结束。问题通常是链接列表,而不是树木。