輸入序列中用特殊值 (如 -1, #, 0) 表示空指針,遞歸構建:
// 先序:根 左右
// 樹結構: 1
// / \
// 2 3
// / \ / \
// 4 5 6 7
// 輸入序列:1 2 4 -1 -1 5 -1 -1 3 6 -1 -1 7 -1 -1
typedef struct Node {
int data;
struct Node *left, *right;
} Node;
Node* createTree(int *arr, int *index) {
int val = arr[(*index)++];
if (val == -1) return NULL; // 空節點標記
Node *node = (Node*)malloc(sizeof(Node));
node->data = val;
node->left = createTree(arr, index);
node->right = createTree(arr, index);
return node;
}
// 主函數調用
int main() {
int pre[] = {1,2,4,-1,-1,5,-1,-1,3,6,-1,-1,7,-1,-1};
int idx = 0;
Node *root = createTree(pre, &idx);
// 後續遍歷驗證...
}
| 遍歷方式 | 需標記嗎? | 遞歸邏輯 |
|---|---|---|
| 先序 (根左右) | 是 | 根 → 左 → 右 |
| 中序 (左根右) | 是 | 左 → 根 → 右 (需配合邊界) |
| 後序 (左右根) | 是 | 左 → 右 → 根 |
| 層序 | 是 | 隊列輔助,逐層構建 |
實驗要求「先序創建」實際上是「帶標記先序創建」,標記 (如 -1) 將不確定性轉為確定性,是數據結構教學中經典的樹構建練習。