diff options
| author | mo khan <mo.khan@gmail.com> | 2020-08-28 14:24:45 -0600 |
|---|---|---|
| committer | mo khan <mo.khan@gmail.com> | 2020-08-28 14:24:45 -0600 |
| commit | 2c5a1f4ec23247597f7a2a2007f74f11aaebfeb3 (patch) | |
| tree | 2b969fede99c14f2238708a9502da8c1d591bd03 /src/03 | |
| parent | cfca07ab13c54ce56cb506934c645fa13e3d2212 (diff) | |
create initializer for red/black tree
Diffstat (limited to 'src/03')
| -rw-r--r-- | src/03/rb_tree.c | 11 | ||||
| -rw-r--r-- | src/03/rb_tree.h | 13 | ||||
| -rw-r--r-- | src/03/rb_tree_test.c | 15 |
3 files changed, 39 insertions, 0 deletions
diff --git a/src/03/rb_tree.c b/src/03/rb_tree.c index e69de29..811192d 100644 --- a/src/03/rb_tree.c +++ b/src/03/rb_tree.c @@ -0,0 +1,11 @@ +#include "rb_tree.h" +#include <stdlib.h> + +RBTree *rb_tree_initialize(int value) { + RBTree *tree = malloc(sizeof(RBTree)); + tree->colour = black; + tree->left = NULL; + tree->right = NULL; + tree->value = value; + return tree; +} diff --git a/src/03/rb_tree.h b/src/03/rb_tree.h index e69de29..0945c36 100644 --- a/src/03/rb_tree.h +++ b/src/03/rb_tree.h @@ -0,0 +1,13 @@ +enum colour { + black = 0x01, + red = 0x00, +}; + +typedef struct rb_node { + struct rb_node *left; + struct rb_node *right; + enum colour colour; + int value; +} RBTree; + +RBTree *rb_tree_initialize(int value); diff --git a/src/03/rb_tree_test.c b/src/03/rb_tree_test.c index 6ce05f4..4d5d989 100644 --- a/src/03/rb_tree_test.c +++ b/src/03/rb_tree_test.c @@ -1,13 +1,28 @@ #include "rb_tree.h" #include <cgreen/cgreen.h> #include <string.h> +/* + * Every node has a colour. red or black + * Root of the tree is always black. + * There are no two adjacent red nodes. (red node cannot have red parent or child) + * Every path from root to child NULL node has same # of black nodes. + */ Ensure(one_equals_one) { assert_that(1, is_equal_to(1)); } +Ensure(initialize_returns_a_new_tree) { + RBTree *tree = rb_tree_initialize(10); + + assert_that(tree, is_not_equal_to(NULL)); + assert_that(tree->value, is_equal_to(10)); + assert_that(tree->colour, is_equal_to(black)); +} + TestSuite *rb_tree_tests() { TestSuite *x = create_test_suite(); add_test(x, one_equals_one); + add_test(x, initialize_returns_a_new_tree); return x; } |
