二叉樹的建立及其他操作
阿新 • • 發佈:2021-11-18
//1、 根據下列程式環境的設定,補充完整二叉樹的二叉連結串列結點結構體的定義。 #include "stdio.h" #define OK 1 #define ERROR 0 typedef int status; //下面是二叉樹相關的定義 #define MAX 20 typedef char Telemtype; typedef struct BTnode { Telemtype data; struct BTnode *lchild; struct BTnode *rchild; }BTnode,*Btree; //2、 在第1題的基礎上,補充完整下面的先序建立二叉樹函式。 Btree create(Btree &T) { char ch; scanf("%c",&ch); if(ch=='#') T=NULL; else { T=new BTnode; T->data=ch; create(T->lchild); create(T->rchild); } return T; } //3、 在第1和第2題的基礎上,編寫先序、中序和後序遍歷二叉樹的函式。 /* 先序*/ int pre_display(Btree T) { if(T) { printf("%3c",T->data); pre_display(T->lchild); pre_display(T->rchild); } return OK; } /* 中序*/ int in_display(Btree T) { if(T!=NULL) { in_display(T->lchild); printf("%3c",T->data); in_display(T->rchild); } return OK; } /* 後序*/ int post_display(Btree T) { if(T){ post_display(T->lchild); post_display(T->rchild); printf("%3c",T->data); } return OK; } status PNodeK(Telemtype &e,int &k,Btree T) { if(T){ k--; if(k==0){ e=T->data; return OK; } if(T->lchild==NULL&&T->rchild==NULL) return OK; PNodeK(e,k,T->lchild); PNodeK(e,k,T->rchild); } } //4、 編寫求二叉樹葉子結點數的函式。 int leavecount(Btree T) //求葉子結點數 { int n; if(T==NULL) return 0; if(T->lchild == NULL && T->rchild ==NULL) return 1; else n=leavecount(T->lchild)+leavecount(T->rchild); return n; } //5、輸入主函式對上面各個函式實現呼叫,記錄並分析程式的執行結果。 int main() { Btree T=NULL; Telemtype e=0; int k; int n; printf("輸入按先序建立二叉樹的序列,如:ABC##DE#G##F###\n"); if(T=create(T)) { printf("先序遍歷OK\n"); pre_display(T); printf("\n中序遍歷OK\n"); in_display(T); printf("\n後序遍歷OK\n"); post_display(T); n=leavecount(T); printf("\n葉子結點數n=%d \n",n); } else printf("ERROR"); printf("請輸入位置K?"); scanf("%d",&k); int m=k; PNodeK(e,k,T); if(e!=0) printf("先序遍歷中,第%d個位置的值是:%c",m,e); else printf("未找到!"); }