Browse Source

fix insert and make another in-order traverse for checking

release0.1.5
Georg Hopp 12 years ago
parent
commit
847b275c86
  1. 62
      src/binarytree.c

62
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;
}

Loading…
Cancel
Save