是双重链接列表或BST

时间:2012-09-24 10:23:29

标签: 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)时间来检测它。

请建议是否有更好的方法。

1 个答案:

答案 0 :(得分:4)

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

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)复杂性