# include <stdio.h> # include <stdlib.h> # include <string.h> # include <iostream> # define OK 0; # define ERROR -1; typedef int TElemType; typedef char DataType; typedef int Status; typedef struct BiNode { DataType data;//存自定義類型的值 struct BiNode *lchild, *rchild;//左右小孩指針 }BiNode,*BiTree; void CreatBiNode(BiNode **Node)//此處應注意傳遞的參數(二重指針) { char data; scanf_s("%c", &data); *Node = (BiTree)malloc(sizeof(BiNode)); if (data == '#') { *Node = NULL; } else if ((data != '#') && (*Node)) { (*Node)->data = data; (*Node)->lchild = NULL; (*Node)->rchild = NULL; CreatBiNode(&(*Node)->lchild); CreatBiNode(&(*Node)->rchild); } } Status PreOrderTraverse(BiTree T) { if (T == NULL) { return OK; } else { printf("%c", T->data); PreOrderTraverse(T->lchild); PreOrderTraverse(T->rchild); } } Status InOrderTraverse(BiTree T) { if (T == NULL) { return OK; } else { InOrderTraverse(T->lchild); printf("%c", T->data); InOrderTraverse(T->rchild); } } Status PostOrderTraverse(BiTree T) { if (T == NULL) { return OK; } else { PostOrderTraverse(T->lchild); PostOrderTraverse(T->rchild); printf("%c", T->data); } } int main() { printf("先序輸入二叉樹(空結點用'#'表示):"); BiTree T=NULL; CreatBiNode(&T); printf("先序遍歷二叉樹:"); PreOrderTraverse(T); printf("\n中序遍歷二叉樹:"); InOrderTraverse(T); printf("\n后序遍歷二叉樹:"); PostOrderTraverse(T); system("pause"); return 0; }
解決思想:小生用的是遞歸創建二叉樹,遞歸遍歷二叉樹,因為使用遞歸會比較簡潔。(主要就是遞歸啦)。
PS:如若有人看見小生此篇blog,多多評價和指教哈~,先在此謝過啦!