From 847b275c865f109cd17d4502c6939ace303b1f22 Mon Sep 17 00:00:00 2001 From: Georg Hopp Date: Thu, 22 Aug 2013 23:43:59 +0100 Subject: [PATCH] fix insert and make another in-order traverse for checking --- src/binarytree.c | 62 +++++++++++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/src/binarytree.c b/src/binarytree.c index 43403b9..75fd761 100644 --- a/src/binarytree.c +++ b/src/binarytree.c @@ -49,29 +49,29 @@ findElement(struct element * tree, int data) void insertElement(struct element ** tree, int data) { - struct element ** node = tree; + struct element * node = *tree; - if (NULL == *node) { - *node = newElement(data); + if (NULL == node) { + *tree = newElement(data); return; } - while (data != (*node)->data) { - if (data < (*node)->data) { - if (NULL == (*node)->left) { - (*node)->left = newElement(data); - (*node)->left->parent = *node; + while (data != node->data) { + if (data < node->data) { + if (NULL == node->left) { + node->left = newElement(data); + node->left->parent = node; return; } else { - *node = (*node)->left; + node = node->left; } } else { - if (NULL == (*node)->right) { - (*node)->right = newElement(data); - (*node)->right->parent = *node; + if (NULL == node->right) { + node->right = newElement(data); + node->right->parent = node; return; } else { - *node = (*node)->right; + node = node->right; } } } @@ -218,73 +218,87 @@ main(int argc, char * argv[]) { struct element * root = NULL; - puts ("insert 5:\n"); + puts("insert 5:"); insertElement(&root, 5); printf("R: 0x%p\n", root); printf("4: 0x%p\n", findElement(root, 4)); printf("5: 0x%p\n", findElement(root, 5)); printf("6: 0x%p\n\n", findElement(root, 6)); - puts ("insert 4:\n"); + puts("insert 4:"); insertElement(&root, 4); printf("R: 0x%p\n", root); printf("4: 0x%p\n", findElement(root, 4)); printf("5: 0x%p\n", findElement(root, 5)); printf("6: 0x%p\n\n", findElement(root, 6)); - puts ("insert 5:\n"); + puts("insert 5:"); insertElement(&root, 5); printf("R: 0x%p\n", root); printf("4: 0x%p\n", findElement(root, 4)); printf("5: 0x%p\n", findElement(root, 5)); printf("6: 0x%p\n\n", findElement(root, 6)); - puts ("insert 6:\n"); + puts("insert 6:"); insertElement(&root, 6); printf("R: 0x%p\n", root); printf("4: 0x%p\n", findElement(root, 4)); printf("5: 0x%p\n", findElement(root, 5)); printf("6: 0x%p\n\n", findElement(root, 6)); - puts ("traverse"); + puts("traverse"); traverse(root, printElement); - puts ("\n"); + puts("\n"); - puts ("delete 5 (one child on both sides):\n"); + puts("delete 5 (one child on both sides):"); deleteElement(&root, 5); printf("R: 0x%p\n", root); printf("4: 0x%p\n", findElement(root, 4)); printf("5: 0x%p\n", findElement(root, 5)); printf("6: 0x%p\n\n", findElement(root, 6)); - puts ("delete 6 (one child on the left):\n"); + puts("delete 6 (one child on the left):"); deleteElement(&root, 6); printf("R: 0x%p\n", root); printf("4: 0x%p\n", findElement(root, 4)); printf("5: 0x%p\n", findElement(root, 5)); printf("6: 0x%p\n\n", findElement(root, 6)); - puts ("insert 6:\n"); + puts("insert 6:"); insertElement(&root, 6); printf("R: 0x%p\n", root); printf("4: 0x%p\n", findElement(root, 4)); printf("5: 0x%p\n", findElement(root, 5)); printf("6: 0x%p\n\n", findElement(root, 6)); - puts ("delete 6 (a leaf):\n"); + puts("delete 6 (a leaf):"); deleteElement(&root, 6); printf("R: 0x%p\n", root); printf("4: 0x%p\n", findElement(root, 4)); printf("5: 0x%p\n", findElement(root, 5)); printf("6: 0x%p\n\n", findElement(root, 6)); - puts ("delete 4 (a leaf and root):\n"); + puts("delete 4 (a leaf and root):"); deleteElement(&root, 4); printf("R: 0x%p\n", root); printf("4: 0x%p\n", findElement(root, 4)); printf("5: 0x%p\n", findElement(root, 5)); printf("6: 0x%p\n\n", findElement(root, 6)); + puts("insert 4:"); + insertElement(&root, 4); + puts("insert 5:"); + insertElement(&root, 5); + puts("insert 6:"); + insertElement(&root, 6); + printf("4: 0x%p\n", findElement(root, 4)); + printf("5: 0x%p\n", findElement(root, 5)); + printf("6: 0x%p\n\n", findElement(root, 6)); + + puts("traverse"); + traverse(root, printElement); + puts("\n"); + return 0; }