diff options
| author | mo khan <mo.khan@gmail.com> | 2020-08-31 12:06:02 -0600 |
|---|---|---|
| committer | mo khan <mo.khan@gmail.com> | 2020-08-31 12:06:02 -0600 |
| commit | 16e6a203e6c6ff0eab758a47aa651e6f36d9ce59 (patch) | |
| tree | 18ecbdce67886a1c02890dc52547fb9a2e6a3de0 /src/03 | |
| parent | 2e99c5ff1a5a852af3fcdfab209aaca1f304830e (diff) | |
docs: document algorithm to convert AVL to Red-Black tree
Diffstat (limited to 'src/03')
| -rw-r--r-- | src/03/01/README.md | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/03/01/README.md b/src/03/01/README.md index e87168f..32ada6c 100644 --- a/src/03/01/README.md +++ b/src/03/01/README.md @@ -1,3 +1,62 @@ Illustrate that the nodes of any AVL tree T can be colored "red" and "black" so that T becomes a red-black tree. + +```plaintext + AVL Tree Red-Black Tree + (20:3) (20:r) + / \ --> / \ + (15:2) (30:2) (15:b) (30:b) + / \ \ / \ \ +(10:1) (17:1) (35:1) (10:r) (17:r) (35:r) + +* perform in order traversal +* add node to red/black tree +* assign colour of Red/Black node based on height of AVL node + +Step 1: + (20:r) + +Step 2: + (20:r) + / + (15:b) + +Step 3: + (20:r) + / \ + (15:b) (30:b) + +Step 4: + (20:r) + / \ + (15:b) (30:b) + / + (10:r) + +Step 5: + (20:r) + / \ + (15:b) (30:b) + / \ + (10:r) (17:r) + +Step 6: + (20:r) + / \ + (15:b) (30:b) + / \ \ + (10:r) (17:r) (35:r) +``` + +```c +RBTree *avl_tree_to_rb_tree(AVLTree *t) { + if (!t) + return NULL; + + RBTree *r = rb_tree_initialize_with(t->value, t->height % 2 == 0 ? black : red); + r->left = avl_tree_to_rb_tree(t->left); + r->right = avl_tree_to_rb_tree(t->right); + return r; +} +``` |
