Есть Вдвойне список ссылок ИЛИ BST

Дан узел со следующей структурой

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 ответ

Решение

Я полагаю, вы могли бы проверить, является ли список с двойной связью или нет с этим фрагментом кода:

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) сложность

Другие вопросы по тегам