首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

二叉樹創建與遍歷:運行時輸入指南

     編輯:程式設計綜合問答

問題背景

在使用 C 語言實現二叉樹的先序創建時,代碼編譯通過,但運行時不知該如何輸入數據。典型代碼片段如下:

void CreatBiTree(BiTree *T) {
    char ch;
    fflush(stdin);
    if((ch = getchar()) == '\n')
        *T = NULL;
    else {
        (*T) = (BiTNode *)malloc(sizeof(BiTNode));
        if(!(*T)) exit(1);
        (*T)->data = ch;
        CreatBiTree(&((*T)->lchild));
        CreatBiTree(&((*T)->rchild));
    }
}

解決方案

該函數通過 getchar() 逐字符讀取輸入,遇到換行符('\n')視為空節點。因此,運行時應按先序遍歷順序輸入節點字符,字符間可用空格分隔,最後以換行符結束。

例如,對於一棵根節點為 A、左子樹為 B、右子樹為 C 的樹,輸入:

A B  C  \n

其中空格僅為分隔,程序實際讀取的是字符序列 A、B、C、\n。若某節點為空,直接輸入換行或在對應位置輸入換行符即可。

注意事項

  • fflush(stdin) 在標準 C 中行為未定義,建議改用循環清空輸入緩衝區。
  • 輸入的字符數必須與樹的結構匹配,否則會導致樹構建異常或程序阻塞。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved