---
# System prepended metadata

title: Binary Search Tree 函式庫

---

# Binary Search Tree 函式庫

1. 將已建立好的新node插入在BST中(input:欲插入的node及欲插入樹的root，及你的compare函式)
(compare說明: 使用者須自行實作比較資料的函數，並傳入函式中，input: 兩個節點位置，比較節點內部資料，輸出為1(A>B)，-1(A<B)，0(A=B))
```c
node_t *insertNode(void *element, node_t *root, int (*compare)(void *, void *))
```
2.  尋找資料位於樹中的位置(欲插入的node及欲插入樹的root，及你的compare函式)
(使用者須自行實作比較資料的函數，並傳入函式中，input: 兩個節點位置，比較節點內部資料，輸出為1(A>B)，-1(A<B)，0(A=B))
```c
node_t *findNode(void *element, node_t *root, int (*compare)(void *, void *))
```
3. 尋找資料最小的點((依據BST規則，一路向左)
(input: tree's root，return: 資料最小的點的位置)
```c
node_t *findMinNode(node_t *root);
```
4. 尋找資料最大的點(依據BST規則，一路向右)
 (input: tree's root，return: 資料最大的點的位置)
```c
node_t *findMaxNode(node_t *root)
```
5. 刪除節點(input:欲插入的node及欲插入樹的root，及你的compare函式)
(使用者須自行實作比較資料的函數，並傳入函式中，input: 兩個節點位置，比較內部資料，輸出為1(A>B)，-1(A<B)，0(A=B))
```c
node_t *deleteNode(void *element, node_t *root, int (*compare)(void *, void *))
```

6. 依inOrder方式列印BST (LVR)
(input: tree's root 和你的compare函式) 
(使用者須自行實作印出資料的函數並傳入，因為無法得知想印甚麼資料)

```c
void inOrder(node_t *root, void (*print_)(void *))
```

7. 複製一棵樹 (input: 欲複製樹的root，你用來針對你的node進行空間分配及資訊複製的函式，return: 新的樹的root)
(使用者須自行實作創造一個新節點，並將資料複製在該新節點內，input: 原始樹的node位置，return: 新樹node的位置)
```c
node_t *treeCopy(node_t *root, int (*node_allo)(void *))
```

8. 檢查兩棵樹是否一樣
input: 兩棵樹的root及你的compare函式，return: 1(same)，0(not same)
(使用者須自行實作compare函數，用來檢查兩棵樹的node內容是否一樣，一樣輸出1，不一樣輸出0)
```c
int treeEqual(node_t *root1, node_t *root2, int *(compare)(void *, void *))
```


