diff options
| -rw-r--r-- | src/02/02/Makefile | 2 | ||||
| -rw-r--r-- | src/02/02/btree.c | 25 | ||||
| -rw-r--r-- | src/02/02/btree.h | 6 | ||||
| -rw-r--r-- | src/02/02/btree_test.c | 8 | ||||
| -rw-r--r-- | src/02/02/queue.c | 17 | ||||
| -rw-r--r-- | src/02/02/queue.h | 9 |
6 files changed, 61 insertions, 6 deletions
diff --git a/src/02/02/Makefile b/src/02/02/Makefile index 3e1c4e6..b0b7b35 100644 --- a/src/02/02/Makefile +++ b/src/02/02/Makefile @@ -5,7 +5,7 @@ CC=clang TEST_LIBS = -lcgreen BUILDDIR := build -OBJS := $(addprefix $(BUILDDIR)/,btree.o) +OBJS := $(addprefix $(BUILDDIR)/,btree.o queue.o) TEST_OBJS := $(addprefix $(BUILDDIR)/,btree_test.o) $(BUILDDIR)/%.o : %.c diff --git a/src/02/02/btree.c b/src/02/02/btree.c index 99288cc..7dadc81 100644 --- a/src/02/02/btree.c +++ b/src/02/02/btree.c @@ -1,4 +1,5 @@ #include "btree.h" +#include "queue.h" BTree *btree_init(int data) { BTree *tree = malloc(sizeof(BTree)); @@ -9,8 +10,28 @@ BTree *btree_init(int data) { } bool btree_is_bst(BTree *tree) { - if (tree) { - return true; + if (!tree) { + return false; } + + Queue *queue = queue_init(); + queue_enq(queue, tree->left); + queue_enq(queue, tree); + queue_enq(queue, tree->right); + + // in order traversal + // fill queue + // iterate through queue and + // check if last is less than next + while (queue_size(queue) > 0) { + BTree *item = queue_deq(queue); + if (!item) + continue; + + queue_enq(queue, item->left); + queue_enq(queue, item); + queue_enq(queue, item->right); + } + return false; } diff --git a/src/02/02/btree.h b/src/02/02/btree.h index 5be69b3..52e24a9 100644 --- a/src/02/02/btree.h +++ b/src/02/02/btree.h @@ -1,9 +1,9 @@ #include <stdlib.h> #include <stdbool.h> -typedef struct node { - struct node *left; - struct node *right; +typedef struct btree_node { + struct btree_node *left; + struct btree_node *right; int data; } BTree; diff --git a/src/02/02/btree_test.c b/src/02/02/btree_test.c index feb0e3f..3b9a64d 100644 --- a/src/02/02/btree_test.c +++ b/src/02/02/btree_test.c @@ -19,11 +19,19 @@ Ensure(BinaryTree, when_a_tree_has_a_single_node) { assert_that(result, is_equal_to(true)); } +Ensure(BinaryTree, when_the_node_on_the_left_is_greater_than_the_root) { + BTree *tree = btree_init(100); + tree->left = btree_init(200); + + assert_that(btree_is_bst(tree), is_equal_to(false)); +} + TestSuite *binary_search_tree_tests() { TestSuite *suite = create_test_suite(); add_test_with_context(suite, BinaryTree, when_a_tree_is_NULL); add_test_with_context(suite, BinaryTree, when_a_tree_has_a_single_node); + add_test_with_context(suite, BinaryTree, when_the_node_on_the_left_is_greater_than_the_root); return suite; } diff --git a/src/02/02/queue.c b/src/02/02/queue.c new file mode 100644 index 0000000..24a2f57 --- /dev/null +++ b/src/02/02/queue.c @@ -0,0 +1,17 @@ +#include "queue.h" +#include <stdlib.h> + +Queue *queue_init() { + return NULL; +} + +int queue_size(Queue *queue) { + return 0; +} + +void queue_enq(Queue *queue, void* data) { +} + +void *queue_deq(Queue *queue) { + return NULL; +} diff --git a/src/02/02/queue.h b/src/02/02/queue.h new file mode 100644 index 0000000..fa10fa8 --- /dev/null +++ b/src/02/02/queue.h @@ -0,0 +1,9 @@ +typedef struct sll_node { + struct sll_node *next; + void *data; +} Queue; + +Queue *queue_init(); +int queue_size(Queue *queue); +void *queue_deq(Queue *queue); +void queue_enq(Queue *queue, void* data); |
