1 / 24

Understanding Red-Black Trees: Properties, Height, and Rotations

Learn the key properties, height analysis, and rotations of Red-Black Trees, a balanced binary search tree structure with special rules on node colors. Discover how rotations maintain the tree's shape and insertion balance.

jwestern
Download Presentation

Understanding Red-Black Trees: Properties, Height, and Rotations

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. CMPT 225 Red–black trees

  2. Red-black Tree Structure • A red-black tree is a BST! • Each node in a red-black tree has an extra color field which is • red or • black • In addition false nodes are added so that every (real) node has two children • These are pretend nodes, they don’t have to have space allocated to them • These nodes are colored black • We do not count them when measuring a height of nodes • Nodes have an extra reference to their parent

  3. Red-black Tree Properties • 1 – Every node is either red or black • 2 – Every leaf is black • This refers to the pretend leaves • In implementation terms, every null child of a node considered to be a black leaf • 3 – If a node is red both its children must be black • 4 – Every path from a node to its descendent leaves contains the same number of black nodes • 5 – The root is black (mainly for convenience)

  4. 87 65 47 32 93 82 71 Example of RB tree

  5. RB Trees: Data structure publicclass TreeNode<T> { publicenum Color {red, black} private T item; private TreeNode<T> leftChild; private TreeNode<T> rightChild; private TreeNode<T> parent; private Color color; // constructors, accessors, mutators... }

  6. Red-black Tree Height • The black height of a node, bh(v), is the number of black nodes on any path from v to a leaf (not counting the pretend node). • Remember that every path from a node to a leaf contains the same number of black nodes • The height of a node, h(v), is the number of nodes on the longest path from v to a leaf (not counting the pretend node). • Let bh be the black height of the tree (root) and h the height of the tree (root)

  7. Analysis of Red-black Tree Height Assume that a tree has n internal nodes • An internal node is a non-leaf node (a node containing a value), remember that the leaf nodes are just pretend nodes • Claim: The tree will have h 2*log(n+1) • A tree has at least 2bh – 1 internal (real) nodes, i.e., n  2bh – 1 • Proof by MI • bh  h / 2 (from property 3 of a RB-tree) • Hence,n  2h/2 – 1 • log(n + 1)  h / 2 (+1 and take log2 of both sides) • h  2*log(n + 1) (multiply by 2)

  8. Rotations • An item must be inserted into a red-black tree at the correct position • The shape of any particular tree is determined by: • the values of the items inserted into the tree • the order in which those values are inserted • A tree’s shape can be altered by rotation while still preserving the bst property

  9. x z z x A C B C B A Left Rotation Left rotate(x)

  10. x z z x A C B C B A Right Rotation Right rotate(z)

  11. x x z z 47 81 32 13 40 37 44 C B A C B A Left Rotation Example Perform a left rotation of the node with the value 32, which we will call x - Make a reference to the right child of x x z

  12. x x z z 37 40 44 32 81 47 13 C B A B C A Left Rotation Example Perform a left rotation of the node with the value 32, which we will call x - Make a reference to the right child of x x - Make z’s left child x’s right child - Detach z’s left child z

  13. x z x z 81 32 13 40 37 47 44 B C A B C A Left Rotation Example Perform a left rotation of the node with the value 32, which we will call x - Make a reference to the right child of x x - Make z’s left child x’s right child - Detach z’s left child - Make x the left child of z z - Make z the child of x’s parent

  14. x z x z 81 32 13 40 37 47 44 B C A B C A Left Rotation Example Perform a left rotation of the node with the value 32, which we will call x - Make a reference to the right child of x x - Make z’s left child x’s right child - Detach z’s left child - Make x the left child of z z - Make z the child of x’s parent

  15. x x z z 47 81 40 32 44 13 37 C B A B A C Left Rotation Example After Performing a left rotation of the node with the value 32 z x

  16. Left Rotation: Algorithm TreeNode<T> leftRotate(TreeNode<T> x) // returns a new root of the subtree originally rooted in x // (that is: returns a reference to z) // Pre: rigth child of x is a proper node (with value) { TreeNode<T> z = x.getRight(); x.setRight(z.getLeft()); // Set parent reference if (z.getLeft() != null) z.getLeft().setParent(x); z.setLeft(x); //move x down z.setParent(x.getParent()); // Set parent reference of x if (x.getParent() != null) //x is not the root if (x == x.getParent().getLeft()) //left child x.getParent().setLeft(z); else x.getParent().setRight(z); x.setParent(z); return z; }

  17. z z x x 37 47 81 32 7 40 13 29 B B A C A C Right Rotation Example Perform a right rotation of the node with the value 47, which we will call z - Make a reference to the left child of z x

  18. z x z x 47 81 32 40 37 7 29 13 A B B C A C Right Rotation Example Perform a right rotation of the node with the value 47, which we will call z - Make a reference to the left child of z - Make x’s right child z’s left child x • Detach x’s right child

  19. x z z x 29 7 37 13 32 81 47 40 A C B B A C Right Rotation Example Perform a right rotation of the node with the value 47, which we will call z - Make a reference to the left child of z - Make x’s right child z’s left child x - Detach x’s right child - Make z the left child of x

  20. z z x x 81 37 29 7 13 40 47 32 B C B A A C Right Rotation Example Perform a right rotation of the node with the value 47, which we will call z - Make a reference to the left child of z - Make x’s right child z’s left child x - Detach x’s right child - Make z the left child of x - In this case, make x the new root

  21. RB Tree: Operations • Search: the same as Search for BST (cannot spoil RB properties) • Insertion: first insert with BST insertion algorithm, then fix RB properties • Deletion: first delete with BST deletion algorithm, then fix RB properties To fix use: • rotate operations • recoloring of nodes -> neither of them will spoil the BST property Demonstration of Red/Black Tree operations: http://www.ece.uc.edu/~franco/C321/html/RedBlack/

  22. Red-black Tree Insertion • First perform the standard BST insertion • Color the inserted node x with color red • The only r-b property that can be violated is #3, that both a red node’s children are black • If x’s parent p is black, we are done • Assume it’s red: • If x’s uncle is red, recolor x’s parent, its parent and uncle, and continue recursively • If x’s uncle is black, first make sure x is left child (left_rotate in p if necessary); second right_rotate in parent of p

  23. x’s uncle is red

  24. x’s uncle is black left_rotate on p • Assuming that p is left child of its parent, in the other case, everything is symmetric p x right_rotate on p^2[x]

More Related