【发布时间】:2021-12-30 08:07:04
【问题描述】:
当给定一个由邻接表表示的无向图 G 时,如何使用 DFS 来查看该图是否是完美二叉树?
我已经能够识别边缘情况:例如,对于深度 D,您需要 2^n-1 个节点,您可以使用对数计算出最大深度,如果不完整,您知道您没有完美的树,但我想不出使用邻接表和 DFS 进行测试的有效方法。
【问题讨论】:
-
您可以有一个计数器字典,您可以在其中跟踪每个级别中的节点数。还有一组跟踪访问过的节点。当您这样做时,您的 dfs 会跟踪深度并将新节点添加到它们各自的级别。最后,检查每个级别是否有适当数量的节点。
-
最难的部分是找出哪个节点是这棵完美二叉树的根。如果你有一个图,它是图意义上的树,那么你可以选择任何节点作为根,你会得到一个父子意义上的树。但在你的情况下,只有一个可能的根会产生一棵完美的二叉树。
-
我建议一个算法分为两部分:首先,识别一个候选根;然后,检查这个根,你有一个完美的二叉树。
-
PS:对于以后的问题,请考虑在the computer science stackexchange 上提问,而不是在 stackoverflow 上提问。对于更多的理论问题,您可能会在此处获得更好的答案,而对于更多面向编程的问题,您可能会在此处获得更好的答案。
-
@Stef 根是唯一度数为 2 的顶点
标签: algorithm binary-tree graph-algorithm