Browse Source

fix post order traversal used for destruction of existing tree

release0.1.5
Georg Hopp 12 years ago
parent
commit
26da90232f
  1. 16
      src/hash.c
  2. 3
      src/tree/destroy.c
  3. 3
      src/utils/memory.c

16
src/hash.c

@ -36,14 +36,14 @@ main(int argc, char * argv[])
deleted = hashDelete(hash, CSTRA("f9e0g"));
delete(deleted);
//deleted = hashDelete(hash, CSTRA("fcrne9"));
//delete(deleted);
//deleted = hashDelete(hash, CSTRA("fr09ie"));
//delete(deleted);
//deleted = hashDelete(hash, CSTRA("jfde9w8"));
//delete(deleted);
//deleted = hashDelete(hash, CSTRA("j8frheff"));
//delete(deleted);
deleted = hashDelete(hash, CSTRA("fcrne9"));
delete(deleted);
deleted = hashDelete(hash, CSTRA("fr09ie"));
delete(deleted);
deleted = hashDelete(hash, CSTRA("jfde9w8"));
delete(deleted);
deleted = hashDelete(hash, CSTRA("j8frheff"));
delete(deleted);
delete(hash);
memCleanup();

3
src/tree/destroy.c

@ -39,7 +39,8 @@ treeDestroy(Tree * this, TreeAction action)
* If we come from the right so nothing and go to our
* next parent.
*/
if ((NULL == TREE_LEFT(node) && NULL == TREE_RIGHT(node))
if (((NULL == TREE_LEFT(node) || previous == TREE_LEFT(node))
&& NULL == TREE_RIGHT(node))
|| previous == TREE_RIGHT(node)) {
Tree parent = TREE_PARENT(node);

3
src/utils/memory.c

@ -683,7 +683,8 @@ post(struct memSegment * tree, void (*cb)(struct memSegment *, int))
* If we come from the right so nothing and go to our
* next parent.
*/
if ((NULL == node->left && NULL == node->right)
if (((NULL == node->left || previous == node->left)
&& NULL == node->right)
|| previous == node->right) {
struct memSegment * parent = node->parent;

Loading…
Cancel
Save