Sono molto confuso da un certo numero di articoli in siti diversi per quanto riguarda la costruzione di un Binary Search Tree
da qualsiasi attraversamento (pre
, post
o in-order
), o una combinazione di due di loro . Ad esempio, alla pagina this, si dice che dato l'attraversamento dell'ordine pre
,o level
, insieme con l'attraversamento in-order
, si può costruire lo BST
. Ma here e there, ci mostrano di costruire un BST
da pre-order
da solo. Inoltre, here ci mostrano come costruire il BST
dagli attraversamenti dati pre
e post-order
. In qualche altro sito, ho trovato una soluzione per la costruzione di un BST
solo dal traversal post-order
.Come molti attraversamenti devono essere conosciuti per costruire un BST
Ora so che dati gli attraversamenti inorder
e pre-order
, è possibile formare univocamente uno BST
. Per quanto riguarda il primo link ho fornito, anche se dicono che non possiamo costruire il BST
da pre-order
e post-order
, non posso semplicemente ordinare l'array post-order
per ottenere il suo inorder
attraversamento, e quindi utilizzare tale e la matrice pre-order
per formare la BST
? Sarà uguale alla soluzione nel 4 ° link o differente? E dato solo pre-order
, posso ordinarlo per ottenere lo in-order
, quindi usare quello e lo pre-order
per ottenere lo BST
. Ancora una volta, deve essere diverso dalla soluzione ai link 2 e 3?
In particolare, cosa è sufficiente per generare in modo univoco il BST
? Se uniquement non è richiesto, posso semplicemente ordinarlo per ottenere l'attraversamento in-order
e creare uno degli N possibili BST
da esso in modo ricorsivo.
Quindi le soluzioni al 2 ° e 3 ° link generano l'unica possibile 'BST'? – SexyBeast
@Cupidvogel: Non ho seguito il codice lì - ma se è corretto allora sì. Esiste una sola BST per ogni attraversamento preordinato. – amit
Quindi consultare l'articolo su http://www.geeksforgeeks.org/archives/6633. Costruiscono un 'BST' da traversamenti' pre' e 'in-order'. Ma considerando che l'albero può essere costruito dal solo "pre-ordine", non pensi che la ricerca binaria necessaria in questo codice per trovare la posizione lo renda meno efficiente? Non sarà più efficiente non usare affatto "inorder", e semplicemente usare il "pre-ordine" per costruire l'albero? Tuttavia, le due soluzioni produrranno necessariamente lo stesso albero? – SexyBeast