函數代碼如下:#include<stdio.h>#include<stdlib.h>#define OK 1#define ERROR 0#define OVERFLOW -1typedef int Status;typedef char ElemType;typedef struct BitNode{ElemType data;struct BitNode *LChild,*RChild;}BitNode,*BitTree;//生成一個空的二叉樹Status InitBitTree(BitTree T){T = NULL;return OK;}//先序構造二叉樹Status CreateBitTree ( BitTree T ) {ElemType ch; scanf("%c",&ch);if(ch == ' '){T = NULL;}else{T = (BitNode *)malloc(sizeof(BitNode)); if(!T){printf("分配內存空間失敗!");exit(OVERFLOW); }T->data = ch;CreateBitTree(T->LChild );CreateBitTree(T->RChild ); }return OK;}//先序遍歷二叉樹int PreVisit(BitTree T,int (*VisitTree)(ElemType elem)){if(T){if(VisitTree(T->data))if(PreVisit(T->LChild,VisitTree))if(PreVisit(T->RChild,VisitTree))return OK;return ERROR;}elsereturn OK;}//打印輸出二叉樹中的數據int VisitTree(ElemType elem){printf("%3c",elem); return OK;}//主函數int main(){BitTree T;InitBitTree(T);printf("請輸入字符,創建樹:\n");CreateBitTree(T );printf("先序遍歷結果為:\n");PreVisit(T,VisitTree);printf("\n"); return 0;}先序遍歷函數PreVisit() 絕對沒錯,我已反復調試過很多遍,現在把耳朵都調耳鳴了,悲劇啊。。。財富值的話僅剩2點了,望大家不吝賜教!
2 回答

30秒到達戰場
TA貢獻1828條經驗 獲得超6個贊
//先序構造二叉樹
BitTree CreateBitTree(BitTree &T)
{
ElemType ch;
scanf("%c",&ch);
if(ch == ' ')
{
T = NULL;
}
else
{
T = (BitNode *)malloc(sizeof(BitNode));
if(!T)
{
printf("分配內存空間失敗!");
exit(OVERFLOW);
}
T->data = ch;
CreateBitTree(T->LChild );
CreateBitTree(T->RChild );
}
return T;
}

四季花海
TA貢獻1811條經驗 獲得超5個贊
本身具備遍歷功能,例如:Disp_xian直接調用就行
要想使用PreOrderTraverse函數,必須增加打印輸出函數才能滿足第二個參數是函數指針類型
#includestdio.h
- 2 回答
- 0 關注
- 204 瀏覽
添加回答
舉報
0/150
提交
取消