內容簡介:
此次作業在建立二叉樹時采用先序輸入的方法,遍歷時則采用先序,中序,后序三種方法。
注:建立二叉樹時,以輸入的字符為"#"為結束。
此次的二叉樹結構為:
1.二叉樹的建立:
void createBiTree(PTree *p)//建立二叉樹 { char ch; scanf("%c", &ch); getchar();//此時%c讀取的是單個字符,所以用getchar來接收一下 if(ch == '#')//結束條件 *p = NULL; else { *p = (PTree)malloc(sizeof(Tree)); (*p) -> ch = ch; printf("請輸入%c的左子樹\n", ch); createBiTree(&(*p) -> lchild); printf("請輸入%c的右子樹\n", ch); createBiTree(&(*p) -> rchild); } }
2.二叉樹的遍歷:
(1)先序遍歷
void preOrderTraverse(PTree p)//先序遍歷 { if(p == NULL) return ; printf("%c ", p -> ch); preOrderTraverse(p -> lchild); preOrderTraverse(p -> rchild); }
(2)中序遍歷
void InOrderTraverse(PTree p)//中序遍歷 { if(p == NULL) return; InOrderTraverse(p -> lchild); printf("%c ", p -> ch); InOrderTraverse(p -> rchild); }
(3)后序遍歷
void BackOrderTraverse(PTree p)//后續遍歷 { if(p == NULL) return ; BackOrderTraverse(p -> lchild); BackOrderTraverse(p -> rchild); printf("%c ", p -> ch); }
3.主函數:
int main() { PTree pt; createBiTree(&pt); printf("先序遍歷:"); preOrderTraverse(pt); printf("\n"); printf("中序遍歷:"); InOrderTraverse(pt); printf("\n"); printf("后序遍歷:"); BackOrderTraverse(pt); printf("\n"); return 0; }
4.運行結果:
5.總結:
此次建立二叉樹采用了先序輸入的方式,從左到右依次建立子樹,並使用遞歸依次進行先,中,后序遍歷,參考了ppt上的相關算法,但使用的方法好像較為重復和麻煩,還要提升自己編程的能力。