algorithm - 是双向链表还是 BST

标签 algorithm binary-search-tree doubly-linked-list

给定一个具有以下结构的节点

class Node {
int data,
Node* P1,
Node* p2;
}

我们需要确定节点是否表示循环双向链表或二叉树。 在我看来,我们需要从一个方向开始遍历给定的节点

node = givenNode;
while(node->P1 != null && node->P1 != givenNode)
{
  node = node->p1
}

if(node == givenNode) // It means Circular DLL
else if(node == null)  // It means Tree

检测到这一点需要 O(n) 的时间。

如果有比这更好的方法,请提出建议。

最佳答案

我建议你可以用这段代码检查它是否是双向链表:

node = givenNode;
if(givenNode->P1 == null || givenNode->P2 == null)
 // It can not be double link list (circular)
else if(givenNode->p1->p2 == givenNode || givenNode->p2->p1 == givenNode)
{
//It is a double linked list
}
else
{
It is not a double linked list
}

复杂度为 O(1)

关于algorithm - 是双向链表还是 BST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12563074/

相关文章:

algorithm - 数字搜索树如何工作?

java - 链表的最佳搜索算法

c++ - 如何反转链表的每 k 个元素?

java - 我将如何优化此外观以获得唯一的数字算法功能

java - ArrayindexOutOfBoundsException 与最佳二叉搜索树实现 java

java - 你如何证明或说明快速归并排序是一种不稳定的算法?

java - 如何处理这个类的可见性问题?

c++ - 双向链表模板复制构造函数赋值运算符

algorithm - 有没有一种有效的算法可以做到这一点?

Java数组——消除中间的连续数