convertir arbre binaire à binaire Recherche Arbre inplace en utilisant C

voix
0

Sans utiliser d'espace supplémentaire convertir Binary Tree Binary Search tree.I est venu avec l'algo suivants, mais il ne fonctionne pas.

BTtoBST (noeud racine de *)

1. Si la racine est NULL retour

2.else courant = racine

3.En (current-> gauche> courant) échange (current-> à gauche, en cours)

4.if (current-> droite <courant) échange (current-> droite, en cours)

5.current = current-> gauche

6 aller à 3 si le courant! = NULL autre aller à 4

7.current = current-> droite

Merci d'avance

PS: J'ai vu ce lien , mais n'a pas été d' un grand secours !! Convertir Binary Tree -> BST (maintien de la forme de l' arbre d' origine)

Créé 29/03/2011 à 05:49
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
1

Vous pouvez échanger les nœuds , y compris les sous - arbres (non seulement le contenu du nœud) comme dans un arbre AVL http://en.wikipedia.org/wiki/AVL_tree

Il suffit de garder échange aussi longtemps que les contraintes de BST sont violés, le redémarrage de la recherche en profondeur d'abord de la racine après chaque échange.

Créé 29/03/2011 à 08:42
source utilisateur

voix
0

Effectuer un post-ordre (ascendant) traversal de l'arbre, en prenant les nœuds qui sont visités et les insérer dans un BST.

Ne « sans espace supplémentaire » empêcher récursion?

Sinon, quelque chose comme:

# 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_bstest une opération de filtrage; il faut une bst existante et retourne une nouvelle avec le noeud donné ajouté.

Ajout d' un nœud feuille à bstest sûr parce que nous ne retournerons jamais à nouveau, afin que nous puissions remplacer son leftet rightpointeurs.

Créé 28/03/2012 à 18:49
source utilisateur

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