convertire albero binario di inplace Binary Search Tree utilizza C

voti
0

Senza l'utilizzo di qualsiasi spazio aggiuntivo convertire albero binario a binario Cerca tree.I si avvicinò con la seguente algo, ma non funziona.

BTtoBST (nodo radice *)

1.if la radice è ritorno NULL

2.else corrente = radice

3.if (current-> sinistra> corrente) di swap (current-> sinistra, corrente)

4.if (current-> destra <corrente) di swap (current-> a destra, corrente)

5.Current = current-> sinistra

6 andare a 3 se la corrente! = NULL altro punto 4

7.Current = current-> destra

Grazie in anticipo

PS: Ho visto questo link, ma non era di molto aiuto !! Convertire Albero Binary -> BST (mantenendo la forma dell'albero originale)

È pubblicato 29/03/2011 alle 05:49
fonte dall'utente
In altre lingue...                            


2 risposte

voti
1

È possibile scambiare i nodi tra cui sottostrutture (non solo il contenuto del nodo) come in un albero AVL http://en.wikipedia.org/wiki/AVL_tree

Basta continuare a scambiare finchè vincoli BST sono violati, il riavvio profonda prima ricerca dalla radice dopo ogni scambio.

Risposto il 29/03/2011 a 08:42
fonte dall'utente

voti
0

Eseguire un post-ordine (bottom up) attraversamento di un albero, prendendo i nodi che vengono visitati e inserendoli in un BST.

Significa "senza alcun spazio extra" preclude la ricorsione?

Se no, allora qualcosa di simile a:

# top level call passes null for bst
bt_to_bst (root, bst)
  # nothing to add to bst; just return it
  if null(root) -> return bst
  # if this is a leaf node, stick it into the BST
  if null(root->left) && null(root->right)
    return bst_insert(bst, root)
  # otherwise add all of left subtree into the bst and then the right tree
  bst = bt_to_bst (root->left, bst);
  return bt_to_bst (root->right, bst);

bt_to_bstè un'operazione di filtraggio; ci vuole un BST esistente e restituisce una nuova con il dato nodo aggiunto ad esso.

L'aggiunta di un nodo foglia al bstè sicuro perché non riusciremo mai a visitare di nuovo, in modo che possiamo sovrascrivere la sua lefte rightpuntatori.

Risposto il 28/03/2012 a 18:49
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more