Quali combinazioni di sequenzializzazione pre, post e in ordine sono uniche?


28

Conosciamo il post-ordine,

post L(x)     => [x]
post N(x,l,r) => (post l) ++ (post r) ++ [x]

e preordine

pre L(x)     => [x]
pre N(x,l,r) => [x] ++ (pre l) ++ (pre r)

e in ordine traversal resp. sequentialisation.

in L(x)     => [x]
in N(x,l,r) => (in l) ++ [x] ++ (in r)

Si può facilmente vedere che nessuno dei due descrive un albero in modo univoco, anche se assumiamo chiavi / etichette distinte a coppie.

Quali combinazioni dei tre possono essere utilizzate a tal fine e quali no?

Le risposte positive dovrebbero includere un algoritmo (efficiente) per ricostruire l'albero e una prova (idea) del perché sia ​​corretto. Le risposte negative dovrebbero fornire esempi contrari, ovvero alberi diversi che hanno la stessa rappresentazione.

Risposte:


16

Innanzitutto, suppongo che tutti gli elementi siano distinti. Nessuna quantità di sequenzializzazioni ti dirà la forma di un albero con elementi [3,3,3,3,3]. Naturalmente è possibile ricostruire alcuni alberi con elementi duplicati; Non so quali belle condizioni sufficienti esistano.

Continuando sui risultati negativi, non è possibile ricostruire completamente un albero binario solo dalle sue sequenzializzazioni pre-ordine e post-ordine. [1,2]preordine, il [2,1]post-ordine deve avere 1il root, ma 2può essere il bambino sinistro o il bambino giusto. Se non ti interessa questa ambiguità, puoi ricostruire l'albero con il seguente algoritmo:

  • Lascia che sia l'attraversamento del pre-ordine e [ y n , ... , y 1 ] sia l'attraversamento del post-ordine. Dobbiamo avere x 1 = y 1 , e questa è la radice dell'albero.[x1,,xn][yn,,y1]x1=y1
  • è il figlio più a sinistra della radice e y 2 è il figlio più a destra. Se x 2 = y 2 , il nodo radice è unario; ricorrere su [ x 2 , ... , x n ] e [ y n , ... , y 2 ] per costruire la singola sottostruttura.x2y2x2=y2[x2,,xn][yn,,y2]
  • Altrimenti, sia che j siano gli indici in modo tale che x 2 = y i e y 2 = x j . [ x 2 , , x j - 1 ] è l'attraversamento del preordine della sottostruttura sinistra, [ x j , , x n ] quello della sottostruttura destra, e allo stesso modo per gli attraversamenti post ordine. La sottostruttura sinistra ha j - 2 = n - i +ijx2=yiy2=xj[x2,,xj1][xj,,xn] elementi e la sottostruttura destra ha i - 2 = n - j + 1 elementi. Richiedere una volta per ogni sottostruttura. A proposito, questo metodo si generalizza agli alberi con ramificazione arbitraria. Con una ramificazione arbitraria, scopri l'estensione del sottotree sinistro e taglia i suoielementi j - 2 da entrambe le liste, quindi ripeti per tagliare il secondo sottotree da sinistra, e così via.j2=ni+1i2=nj+1
    j2

O(n2)Θ(n2)O(nlg(n))nlg(n)

[x1,,xn][z1,,zn]

  • x1
  • kzk=x1[z1,,zk1][zk+1,,zn][x2,,xk][xk+1,,xn]

O(n2)O(nlg(n))

L'ordine postale più l'ordine è ovviamente simmetrico.


C'è un errore di battitura qui: "[1,2] preordine, [1,2] post-ordine deve avere 1 alla radice, ma 2 può essere il figlio sinistro o il figlio destro." L'ordine postale di un tale l'albero sarebbe [2,1] non [1,2] se 2 è un figlio sinistro o destro. Inoltre, vuoi dire se vengono dati sia preordine che postordine, non possiamo ricostruire l'albero, o intendi se ci viene dato solo uno di loro, quindi non possiamo ricostruire l'albero?
CEGRD,

@CEGRD In effetti, il postorder era un errore di battitura. L'esempio mostra che in questo caso non è possibile ricostruire completamente l'albero: non si può sapere se si 2tratta di un bambino di sinistra o di un bambino di destra. Ciò corrisponde al caso "sottostruttura singola" dell'algoritmo di ricostruzione.
Gilles 'SO- smetti di essere malvagio' il

come cambia se sappiamo che è un albero di ricerca binario? per il semplice caso del tuo esempio ([1,2] preordine, [2,1] post-ordine) saremmo in grado di determinare che la radice è 1 e che 2 è il figlio giusto (perché 2 è maggiore di 1) ... destra?
Fersarr,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.