Java 以邻接列表形式表示的二叉树中的循环
我获得了一次面试,面试中我被问到以下问题: 您将获得Java 以邻接列表形式表示的二叉树中的循环,java,algorithm,data-structures,tree,Java,Algorithm,Data Structures,Tree,我获得了一次面试,面试中我被问到以下问题: 您将获得parent--->child关系,即N1---> N2其中N1是N2的父项。这只不过是代表一个 邻接列表形式的二叉树。所以我必须找出是否存在循环 我一直在考虑这个问题,并提出了一个解决方案: 只需检查单个节点,即N1,如果看到有边缘返回到N1,请尝试深入,然后打印。否则转到下一个节点。但是面试官告诉我这不是很有效,有人能帮我找到一个有效的解决方案吗。谢谢。树是一个图形。因此,您应该应用任何图形遍历算法,例如BFS(广度优先搜索)或DFS(深度
parent--->child
关系,即N1--->
N2
其中N1
是N2
的父项。这只不过是代表一个
邻接列表形式的二叉树。所以我必须找出是否存在循环
我一直在考虑这个问题,并提出了一个解决方案:
只需检查单个节点,即
N1
,如果看到有边缘返回到N1
,请尝试深入,然后打印。否则转到下一个节点。但是面试官告诉我这不是很有效,有人能帮我找到一个有效的解决方案吗。谢谢。树是一个图形。因此,您应该应用任何图形遍历算法,例如BFS(广度优先搜索)或DFS(深度优先搜索)
这两种算法都使用O(V)内存来存储顶点列表(V-#个顶点)并花费O(E)时间来完成(E-#个边,在V和V^2之间)。因此,基本上在这两种算法中,您需要一次探索所有边
识别树中循环的算法如下所示:
1) 扎根节点
2) 遍历图形(广度优先或深度优先),记住访问的节点
3) 如果您访问了一个已经访问过的节点,那么您就有了一个循环。增加循环计数器,回溯并转到2,您可以用一种简单的方式: 在由N个节点组成的二叉树中,节点将有N-1条边。如果它有循环,那么具有N个节点的二叉树将有N-1条以上的边 因此,如果nou_nodes==nou_of_edges-1,则需要计算节点和边的数量(父节点->子节点),而不是其他任何循环都有循环 希望你能理解 您需要:
您可以应用以标识图形的连接组件。应用它后,您可以检查是否只有一个连接的组件,以及顶点数是否为E+1。check@DarshanPatel此问题不同。检查一下。你不需要检查一下它是否连接了吗?@Anonymous无法找到你。