typedef struct Node {
int data;
struct Node *left, *right;
} Node;
完整實作涉及 8 個子功能,程式碼較長,建議參考經典教學資源:
| 功能 | 函數簽名 | 核心邏輯 |
|---|---|---|
| 插入 | Node* insert(Node* root, int val) | 遞迴/迴圈比較 val,左小右大,找到 NULL 掛新節點 |
| 前序/中序/後序 | void preorder(Node* root) | 遞迴:根-左-右 / 左-根-右 / 左-右-根 |
| 非遞迴前序 | void preorderIter(Node* root) | 堆疊:推右、推左、彈出訪問 |
| 葉子/非葉子計數 | void count(Node* root, int* leaf, int* nonleaf) | 遞迴:左右皆 NULL 為葉子 |
| 樹高 | int height(Node* root) | 遞迴:max(左高,右高)+1 |
| 層序遍歷 | void levelOrder(Node* root) | 佇列:出隊訪問、入隊左右子 |
| 非遞迴查找 | bool search(Node* root, int val) | 迴圈比較移動指標 |
| 銷毀樹 | void destroy(Node* root) | 後序釋放:先釋放子樹、再 free 根 |
二元搜尋樹是資料結構核心主題,建議從標準教材或高星 GitHub 專案學習完整實作,重點掌握指標操作、遞迴與非遞迴轉換、記憶體管理。