# 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 *))
```