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