Dato un albero di nodi rappresentato tramite il vettore dei padri e un nodo , progettare un algoritmo che in tempo produce la lista dei nodi presenti nel sottoalbero radicato in .

def salbero(P):
    n = len(P)
    alb = [[] for _ in range(n)]
 
    for i in range(n):
        if P[i] != i: alb[P[i]].append(i)
 
    return alb
 
def DFS(G, x, sottoalbero):
    sottoalbero.append(x)
    for i in G[x]:
        DFS(G, i, sottoalbero)
 
    return sottoalbero
 
G = salbero(P)
sottoalbero = DFS(G, x, [])
  • salbero è
  • è un albero, quindi per la DFS