μετατρέπουν δυαδικό δέντρο για να επι τόπου Binary Search Tree χρησιμοποιώντας C

ψήφοι
0

Χωρίς τη χρήση οποιουδήποτε επιπλέον χώρο μετατροπή δυαδικού δένδρου σε δυαδική αναζήτηση tree.I ήρθε με την ακόλουθη algo, αλλά αυτό δεν λειτουργεί.

BTtoBST (κόμβος * root)

1.Εάν ρίζα είναι NULL επιστροφή

2.else τρέχουσα = root

3.Αν (τρεχουσών> αριστερά> τρέχουσα) ανταλλαγής (τρεχουσών> αριστερά, ρεύμα)

4.Σε περίπτωση (τρεχουσών> δεξιά <ρεύματος) ανταλλαγής (τρεχουσών> δεξιά, ρεύμα)

5.current = τρεχουσών> αριστερά

6 πηγαίνετε στο 3 αν το τρέχον! = NULL αλλιώς πάμε σε 4

7. Παρούσα = τρεχουσών> δεξιά

Ευχαριστώ εκ των προτέρων

PS: Είδα αυτό το σύνδεσμο, αλλά δεν ήταν μεγάλη βοήθεια !! Μετατροπή Binary Tree -> BST (διατηρώντας το αρχικό σχήμα δέντρου)

Δημοσιεύθηκε 29/03/2011 στις 05:49
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
1

Μπορείτε να ανταλλάξετε τους κόμβους, συμπεριλαμβανομένων υποδένδρων (όχι μόνο το περιεχόμενο του κόμβου), όπως και σε ένα AVL Tree http://en.wikipedia.org/wiki/AVL_tree

Απλά να έχετε την εναλλαγή εφ 'όσον οι περιορισμοί BST παραβιάζονται, επανεκκίνηση βαθιά αναζήτηση πρώτα από τη ρίζα μετά από κάθε ανταλλαγή.

Απαντήθηκε 29/03/2011 στις 08:42
πηγή χρήστη

ψήφοι
0

Εκτελέστε μια μετα-παραγγελία (bottom up) διάσχιση του δέντρου, τη λήψη των κόμβων που επισκέπτονται και την εισαγωγή τους σε ένα BST.

Μήπως «χωρίς καμία επιπλέον χώρο» αποκλείει αναδρομή;

Αν όχι, τότε κάτι σαν:

# 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είναι μια λειτουργία φιλτραρίσματος? παίρνει ένα υπάρχον BST και επιστρέφει ένα νέο με το συγκεκριμένο κόμβο προστεθούν σε αυτό.

Προσθέτοντας έναν κόμβο φύλλο με το bstείναι ασφαλής γιατί ποτέ δεν θα το επισκεφθεί και πάλι, ώστε να μπορούμε να τους αντικαταστήσει leftκαι rightδείκτες.

Απαντήθηκε 28/03/2012 στις 18:49
πηγή χρήστη

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