lgoritmo O (1) para determinar se o nó é descendente de outro nó em uma árvore de múltiplas via

Imagine a seguinte árvore:

    A
   / \
  B   C
 / \   \
D   E   F

Estou procurando uma maneira de consultar se, por exemplo, F é descendente de A (nota: F não precisa ser um direct descendente de F), o que, nesse caso em particular, seria verdadeiro. Apenas uma quantidade limitada de nós principais em potencial precisa ser testada em relação a um pool de nós em potencial descendentes maiore

UPDATE: ao testar se um nó é descendente de um nó no pool pai em potencial, ele precisa ser testado em TODOS os nós pai em potencia

Isto é o que surgiu:

Converta a árvore de múltiplas vias para uma árvore, ou seja, atribua os seguintes prefixos a todos os nós da árvore acima:

 A = 1
 B = 11
 C = 12
 D = 111
 E = 112
 F = 121

Em seguida, reserve uma matriz de bits para cada tamanho de prefixo possível e adicione os nós pai a serem testados, ou seja, se C for adicionado ao pool de nós pai em potencial, faça:

  1    2    3  <- Prefix length

*[1]  [1]  ...
 [2] *[2]  ...
 [3]  [3]  ...
 [4]  [4]  ...
 ...  ...

Ao testar se um nó é descendente de um nó pai em potencial, use seu prefixo trie, procure o primeiro caractere na primeira "matriz de prefixos" (veja acima) e, se estiver presente, procure o segundo caractere de prefixo no segundo " matriz de prefixos "e assim por diante, ou seja, testar F leva a:

 F = 1    2    1

   *[1]  [1]  ...
    [2] *[2]  ...
    [3]  [3]  ...
    [4]  [4]  ...
    ...  ...

so sim F, é um descendente de C.

Este teste parece ser o pior caso O (n), em que n = comprimento máximo do prefixo = profundidade máxima da árvore, portanto o pior caso é exatamente igual à maneira óbvia de apenas subir na árvore e comparar nós. No entanto, isso terá um desempenho muito melhor se o nó testado estiver próximo à parte inferior da árvore e o nó pai em potencial estiver em algum lugar no topo. A combinação dos dois algoritmos reduziria os dois piores cenários. No entanto, a sobrecarga de memória é uma preocupaçã

Existe outra maneira de fazer isso? Qualquer ponteiro muito apreciado!

questionAnswers(7)

yourAnswerToTheQuestion