Commit 2c5a1f4

mo khan <mo.khan@gmail.com>
2020-08-28 20:24:45
create initializer for red/black tree
1 parent cfca07a
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;
+}
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);
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;
 }