Skip to content

Commit 1034af9

Browse files
committed
bst ..
1 parent a89c997 commit 1034af9

File tree

4 files changed

+45
-8
lines changed

4 files changed

+45
-8
lines changed

tree/binary_search_tree/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
typedef struct s_node
1111
{
1212
void *data;
13+
struct s_node *parent;
1314
struct s_node *left;
1415
struct s_node *right;
1516
} t_node;

tree/binary_search_tree/implementation_example/binary_search_tree.c

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
/* By: jko <jko@student.42seoul.kr> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2020/04/04 21:13:23 by jko #+# #+# */
9-
/* Updated: 2020/04/04 21:51:32 by jko ### ########.fr */
9+
/* Updated: 2020/04/04 23:42:57 by jko ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

@@ -32,6 +32,7 @@ t_node *create_elem(void *data)
3232
if (!node)
3333
return (0);
3434
node->data = data;
35+
node->parent = 0;
3536
node->left = 0;
3637
node->right = 0;
3738
return (node);
@@ -93,29 +94,62 @@ int tree_insert(t_tree *tree, void *data)
9394
prev->left = new;
9495
else
9596
prev->right = new;
97+
if (prev)
98+
new->parent = prev;
99+
tree->size++;
96100
return (1);
97101
}
98102

103+
static t_node *find_next_bigger_parent(t_node *curr)
104+
{
105+
}
106+
99107
int tree_delete(t_tree *tree, void *data_ref, void (*free_data)(void *))
100108
{
109+
t_node *parent;
101110
t_node *curr;
111+
t_node *temp;
102112
int cmp_result;
103113

104-
if (!tree || !free_data)
114+
if (!tree || !free_data || tree_size(tree) == 0)
105115
return (0);
106116
curr = tree->root;
107-
if (tree->cmp(data_ref, tree->root))
108117
while (curr)
109118
{
110-
if (!(cmp_result = tree->cmp(data_ref, curr->data)))
119+
if ((cmp_result = tree->cmp(data_ref, curr->data)))
120+
break ;
121+
if (cmp_result < 0)
122+
curr = curr->left;
123+
else
124+
curr = curr->right;
125+
}
126+
if (!curr)
127+
return (0);
128+
if (!curr->parent)
129+
tree->root = 0;
130+
temp = curr;
131+
132+
if (!curr->left && !curr->right)
133+
curr = 0;
134+
else if (curr->left && curr->right)
135+
{
136+
curr = curr->right
137+
while (curr->left && curr->right)
111138
{
112-
free_data(curr->data);
113-
free(curr);
114139

115-
return (1);
116140
}
117141
}
142+
else
143+
curr = curr->left ? curr->left : curr->right;
118144

145+
if (cmp_result < 0)
146+
prev->left = curr;
147+
else
148+
prev->right = curr;
149+
free_data(temp->data);
150+
free(temp);
151+
tree->size--;
152+
return (1);
119153
}
120154

121155
void free_tree(t_tree *tree, void (*free_data)(void *))

tree/binary_search_tree/implementation_example/tree.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
/* By: jko <jko@student.42seoul.kr> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2020/04/04 21:11:12 by jko #+# #+# */
9-
/* Updated: 2020/04/04 21:50:29 by jko ### ########.fr */
9+
/* Updated: 2020/04/04 23:09:48 by jko ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

@@ -18,6 +18,7 @@
1818
typedef struct s_node
1919
{
2020
void *data;
21+
struct s_node *parent;
2122
struct s_node *left;
2223
struct s_node *right;
2324
} t_node;

tree/binary_search_tree/tree.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
typedef struct s_node
22
{
33
void *data;
4+
struct s_node *parent;
45
struct s_node *left;
56
struct s_node *right;
67
} t_node;

0 commit comments

Comments
 (0)