在二叉树中查找循环

时间:2012-07-05 20:58:10

标签: binary-tree

如何在二叉树中找到循环?我正在寻找一种解决方案,而不是将访问过的节点标记为已访问或进行地址散列。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

如上所述:树(根据定义)不包含循环(循环)。

要测试您的有向图是否包含循环(对已添加到树中的节点的引用),您可以通过树迭代并将每个节点添加到访问列表(或者如果您愿意,还可以将其添加到其中)并检查每个节点新节点,如果它在列表中。 图中循环检测的大量算法只是谷歌搜索。

答案 1 :(得分:1)

假设您有一棵二叉树,但您不相信它并且您认为它可能是一个图形,一般情况下将要求记住所访问的节点。从图中构造最小生成树有点相同的算法,这意味着空间和时间的复杂性将是一个问题。

另一种方法是考虑您在树中保存的数据。考虑一下你有多少哈希值,以便比较。

伪代码会测试这种情况:

  1. 每个节点最多必须有2个子节点和1个父节点(最多3个连接)。超过3个连接=>不是二叉树。
  2. 父母不得是孩子。
  3. 如果节点有两个子节点,则左子节点的值小于父节点,右子节点的值较大。因此,考虑到这一点,如果一个叶子或内部节点作为一个子节点在一个更高级别上的某个节点(如父亲的父节点),您可以根据这些值确定一个循环。如果一个孩子是一个正确的节点,那么它的值必须大于它的父节点,但如果该子节点形成一个循环,则意味着他来自父节点的左侧部分或右侧部分。

    3.A。因此,如果它来自左侧部分,则它的值小于它的兄弟。所以=>不是二叉树。其他部分的想法有些相同。

  4. 除了测试之外,您要测试的树的形式是什么?记住,每个节点都有一个指向它的父节点。 this指针指向单个父。因此,根据您所在树的格式,您可以利用此功能。