首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言遞歸實現二叉樹三種遍歷:先序、中序、後序完整代碼與測試

     編輯:關於C語言

C 語言遞歸實現二叉樹三種遍歷

遞歸是二叉樹遍歷最自然的表達。本文提供完整可編譯代碼,涵蓋節點定義、先序輸入建樹、三種遞歸遍歷、測試用例與輸出驗證。

數據結構定義

typedef struct BiNode {
    char data;
    struct BiNode *lchild, *rchild;
} BiNode, *BiTree;

先序輸入建樹 (空格表示空節點)

void CreateBiTree(BiTree *T) {
    char ch; scanf("%c", &ch);
    if (ch == ' ') { *T = NULL; return; }
    *T = malloc(sizeof(BiNode));
    (*T)->data = ch;
    CreateBiTree(&(*T)->lchild);
    CreateBiTree(&(*T)->rchild);
}

三種遞歸遍歷

// 先序:根 → 左 → 右
void PreOrderTraverse(BiTree T) {
    if (!T) return;
    printf("%c ", T->data);
    PreOrderTraverse(T->lchild);
    PreOrderTraverse(T->rchild);
}

// 中序:左 → 根 → 右
void InOrderTraverse(BiTree T) {
    if (!T) return;
    InOrderTraverse(T->lchild);
    printf("%c ", T->data);
    InOrderTraverse(T->rchild);
}

// 後序:左 → 右 → 根
void PostOrderTraverse(BiTree T) {
    if (!T) return;
    PostOrderTraverse(T->lchild);
    PostOrderTraverse(T->rchild);
    printf("%c ", T->data);
}

測試用例

樹結構:

        -
      /   \
     +     *
    / \   / \
   a   * -   /
      / \ / \
     b   c d   e
                \
                 f

先序輸入序列** (空格用 `_` 表示)**:

- + a _ _ * b _ _ _ * c _ _ _ - d _ _ _ / e _ _ _ f _ _ _

去除下劃線實際輸入:

-+a**b***c---d///e///f///  (共 31 字符,含 16 個空格)

預期輸出

先序遍歷結果為: - + a * b * - c d / e f
中序遍歷結果為: a + b * * c - d - e / f
後序遍歷結果為: a b * * + c d - e f / -

完整 main 函數

int main(void) {
    BiTree T;
    puts("請按先序輸入二叉樹節點 (空格表示空):");
    CreateBiTree(&T);
    puts("先序遍歷結果為:"); PreOrderTraverse(T); putchar('\n');
    puts("中序遍歷結果為:"); InOrderTraverse(T); putchar('\n');
    puts("後序遍歷結果為:"); PostOrderTraverse(T); putchar('\n');
    return 0;
}

遞歸深度與棧安全

  • 完全二叉樹深度 ≈ log₂N,N=10⁶ 時深度 ~20,安全。
  • 退化鏈表深度 = N,N=10⁵ 可能爆棧 (默認 8MB)。
  • 生產環境深度不可控時,改用顯式棧非遞歸版本 (見下一篇)。

小結

遞歸遍歷代碼極簡:**順序調整三行 `printf` 位置即得三種遍歷**。掌握「先序建樹、遞歸三序」模板,是數據結構考試與面試的必考基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved