Skip to content

Commit a4544ea

Browse files
committed
binary search tree
1 parent a3c90d4 commit a4544ea

File tree

4 files changed

+104
-3
lines changed

4 files changed

+104
-3
lines changed

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@
1818
1. [baekjoon](./queue#baekjoon)
1919
1. [생각해보기](./queue#생각해보기)
2020
1. [deque](./deque)
21-
1. [deque(array)](./deque/deque_array)
2221
1. [deque(linked list)](./deque/deque_linked_list)
2322
1. [baekjoon](./deque#baekjoon)
2423
1. [생각해보기](./deque#생각해보기)
25-
1. tree
26-
1. binary tree
24+
1. [tree](./tree)
25+
1. [binary search tree](./tree/binary_search_tree)
26+
1. [baekjoon](./tree#baekjoon)
27+
1. [생각해보기](./tree#생각해보기)
2728
1. priority queue, heap
2829
1. sort
2930
1. hash

tree/README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Tree
2+
3+
[뒤로 가기](https://github.com/nadarm/42-algorithm)
4+
5+
## index
6+
1. [binary search tree](./binary_search_tree)
7+
1. [baekjoon](#baekjoon)
8+
1. [생각해보기](#생각해보기)
9+
10+
## baekjoon
11+
- [5430번 AC](https://www.acmicpc.net/problem/5430)
12+
13+
## 생각해보기
14+
- tree가 사용되는 상황
15+
- array로 tree를 구현하려면?
16+
- 상태공간트리란?
17+
18+
19+
[뒤로 가기](https://github.com/nadarm/42-algorithm)

tree/binary_search_tree/README.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# Binary Search Tree
2+
3+
[뒤로 가기](..)
4+
5+
## exercise 00
6+
- binary search tree을 구현 합니다.
7+
- 아래와 같은 tree.h를 사용 합니다.
8+
```
9+
typedef struct s_node
10+
{
11+
void *data;
12+
struct s_node *left;
13+
struct s_node *right;
14+
} t_node;
15+
16+
typedef struct s_binary_search_tree
17+
{
18+
t_node **root;
19+
int (*cmp)(void *, void *);
20+
} t_tree;
21+
```
22+
23+
### tree_init
24+
- t_tree형 struct를 반환 하는 함수를 작성하세요.
25+
- 반환되는 t_tree는 메모리 할당과 초기화를 거쳐야합니다.
26+
- cmp는 t_node의 data를 비교하는데 사용 됩니다. 첫번째 인자가 더 크면 양수, 작으면 음수, 같다면 0을 반환 합니다.
27+
```
28+
t_tree *tree_init(int (*cmp)(void *, void *));
29+
```
30+
31+
### create_elem
32+
- t_node형 새로운 요소를 생성하는 함수를 작성하세요.
33+
```
34+
t_node *create_elem(void *data);
35+
```
36+
37+
### tree_insert
38+
- tree에 data를 갖는 새로운 요소를 삽입하는 함수를 작성하세요.
39+
- node의 data는 left의 data보다 크고 right의 data보다 작아야 합니다.
40+
- 성공하면 1, 실패하면 0을 반환 합니다.
41+
- 이미 같은 data를 가진 요소가 있다면 실패 합니다.
42+
```
43+
int tree_insert(t_tree *tree, void *data);
44+
```
45+
46+
### tree_find
47+
- tree에 data_ref와 같은 data를 갖는 요소를 찾아 반환하는 함수를 작성하세요.
48+
- 같은 요소가 없다면 널 포인터를 반환 합니다.
49+
```
50+
t_node *tree_find(t_tree *tree, void *data_ref);
51+
```
52+
53+
### tree_delete
54+
- tree에서 data_ref와 같은 data를 가진 요소를 삭제하는 함수를 작성하세요.
55+
- 요소의 데이터는 free_data를 사용해서 메모리 할당을 해제해야 합니다.
56+
- 성공하면 1, 실패하면 0을 반환 합니다.
57+
```
58+
int tree_delete(t_tree *tree, void *data_ref, void (*free_data)(void *));
59+
```
60+
61+
### free_tree
62+
- tree에 있는 요소 전체를 삭제하고 tree의 메모리 할당을 해제하는 함수를 작성하세요.
63+
- 요소의 데이터는 free_data를 사용해서 메모리 할당을 해제해야 합니다.
64+
```
65+
void free_tree(t_tree *tree, void (*free_data)(void *));
66+
```
67+
68+
69+
[뒤로 가기](..)

tree/binary_search_tree/tree.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
typedef struct s_node
2+
{
3+
void *data;
4+
struct s_node *left;
5+
struct s_node *right;
6+
} t_node;
7+
8+
typedef struct s_binary_search_tree
9+
{
10+
t_node **root;
11+
int (*cmp)(void *, void *);
12+
} t_tree;

0 commit comments

Comments
 (0)