1 / 19

Threaded Trees

Threaded Trees. Binary trees have a lot of wasted space: the leaf nodes each have 2 null pointers We can use these pointers to help us in inorder traversals We have the pointers reference the next node in an inorder traversal; called threads

Télécharger la présentation

Threaded Trees

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Threaded Trees • Binary trees have a lot of wasted space: the leaf nodes each have 2 null pointers • We can use these pointers to help us in inorder traversals • We have the pointers reference the next node in an inorder traversal; called threads • We need to know if a pointer is an actual link or a thread, so we keep a boolean for each pointer

  2. Threaded Tree Code • Example code: class Node { int val; Node * left, * right; boolean leftThread, rightThread; }

  3. Threaded Tree Example 6 8 3 1 5 7 11 9 13

  4. Threaded Tree Traversal • We start at the leftmost node in the tree, print it, and follow its right thread • If we follow a thread to the right, we output the node and continue to its right • If we follow a link to the right, we go to the leftmost node, print it, and continue

  5. Threaded Tree Traversal Output 1 6 8 3 1 5 7 11 9 13 Start at leftmost node, print it

  6. Threaded Tree Traversal Output 1 3 6 8 3 1 5 7 11 9 13 Follow thread to right, print node

  7. Threaded Tree Traversal Output 1 3 5 6 8 3 1 5 7 11 9 13 Follow link to right, go to leftmost node and print

  8. Threaded Tree Traversal Output 1 3 5 6 6 8 3 1 5 7 11 9 13 Follow thread to right, print node

  9. Threaded Tree Traversal Output 1 3 5 6 7 6 8 3 1 5 7 11 9 13 Follow link to right, go to leftmost node and print

  10. Threaded Tree Traversal Output 1 3 5 6 7 8 6 8 3 1 5 7 11 9 13 Follow thread to right, print node

  11. Threaded Tree Traversal Output 1 3 5 6 7 8 9 6 8 3 1 5 7 11 9 13 Follow link to right, go to leftmost node and print

  12. Threaded Tree Traversal Output 1 3 5 6 7 8 9 11 6 8 3 1 5 7 11 9 13 Follow thread to right, print node

  13. Threaded Tree Traversal Output 1 3 5 6 7 8 9 11 13 6 8 3 1 5 7 11 9 13 Follow link to right, go to leftmost node and print

  14. Threaded Tree Traversal Code void inOrder(Node *n) { Node cur = leftmost(n); while (cur != nullptr) { print(cur->val); if (cur->rightThread) { cur = cur->right; } else { cur = leftmost(cur->right); } } } Node * leftMost(Node *n) { Node * ans = n; if (ans == null) { return nullptr; } while (ans.left != nullptr) { ans = ans->left; } return ans; }

  15. Threaded Tree Modification • We’re still wasting pointers, since half of our leafs’ pointers are still null • We can add threads to the previous node in an inorder traversal as well, which we can use to traverse the tree backwards or even to do postorder traversals

  16. Threaded Tree Modification 6 8 3 1 5 7 11 9 13

  17. To use these we need to implementthreaded versions for • insert • delete • destroy • copy • traversal • search • as well as others ie balancing.

  18. Insertion • It’s a little more complicated to insert a new node into a threaded BST than into an unthreaded one. • We must set the new node's left and right threads to point to its predecessor and successor, respectively • Suppose that new node n is the right child of its parent p • This means that p is n's predecessor, because n is the least node in p's right subtree.

  19. continued • n's successor is therefore the node that was p's successor before n was inserted, ie, it is the same as p's former right thread.

More Related