在使用 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 中行為未定義,建議改用循環清空輸入緩衝區。