Commit f4eae68
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;
}
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;
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;
}
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
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;
+}
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);