My Project
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules
rbtree_clear.c
Go to the documentation of this file.
1 #include <3ds/util/rbtree.h>
2 #include "rbtree_internal.h"
3 
4 void
6  rbtree_node_destructor_t destructor)
7 {
8  rbtree_node_t *node = tree->root;
9 
10  while(tree->root != NULL)
11  {
12  while(node->child[LEFT] != NULL)
13  node = node->child[LEFT];
14 
15  if(node->child[RIGHT] != NULL)
16  node = node->child[RIGHT];
17  else
18  {
19  rbtree_node_t *parent = get_parent(node);
20 
21  if(parent == NULL)
22  tree->root = NULL;
23  else
24  parent->child[node != parent->child[LEFT]] = NULL;
25 
26  if(destructor != NULL)
27  (*destructor)(node);
28 
29  node = parent;
30  }
31  }
32 
33  tree->size = 0;
34 }
rbtree_node_t * node
Definition: rbtree.h:45
#define RIGHT
size_t size
Definition: rbtree.h:25
void rbtree_clear(rbtree_t *tree, rbtree_node_destructor_t destructor)
Definition: rbtree_clear.c:5
Definition: rbtree.h:21
void(* rbtree_node_destructor_t)(rbtree_node_t *Node)
Definition: rbtree.h:12
#define LEFT
rbtree_node_t * root
Definition: rbtree.h:23
rbtree_node_t * child[2]
Definition: rbtree.h:18