二叉樹的建立與遍歷
阿新 • • 發佈:2018-12-19
#include<iostream> #include<cstring> #include<conio.h> #include<cstdlib> #define OK 1 #define ERROR 0 #define OVERFLOW -1 using namespace std; typedef char TElemType; typedef struct BiTNode{ TElemType data; struct BiTNode *lchild,*rchild; }BiTNode, *BiTree; int CreateBiTree(BiTree &T){ char ch; cout<<"Please input data(/ for NULL Node!): "; cin>>ch;//輸入一個字元 if (ch =='/') //如果是/字元代表節點為空 T = NULL; else { if(!(T=(BiTNode*)malloc(sizeof(BiTNode)))){//如果記憶體分配失敗 cout<< OVERFLOW <<endl; return ERROR;//返回ERROR } T->data = ch;//該節點資訊設定為ch CreateBiTree (T->lchild);//遞迴建立左子樹 CreateBiTree (T->rchild);//遞迴建立右子樹 return OK;//返回OK } } void PreOrderTraverse (BiTree T){//T為要前序遍歷的樹或子樹的根節點 if(T==NULL) //若T為空 return; /*對根節點操作*/ cout<<T->data<<"->"; PreOrderTraverse(T->lchild);//遞迴遍歷左子樹 PreOrderTraverse (T->rchild);//遞迴遍歷右子樹 } void InOrderTraverse (BiTree T){//T為要中序遍歷的樹或子樹的根節點 if(T==NULL) //若T為空 return; InOrderTraverse(T->lchild);//遞迴遍歷左子樹 /*對根節點操作*/ cout<<T->data<<"->"; InOrderTraverse (T->rchild);//遞迴遍歷右子樹 } void PostOrderTraverse (BiTree T){//T為要後序遍歷的樹或子樹的根節點 if(T==NULL) //若T為空 return; PostOrderTraverse(T->lchild);//遞迴遍歷左子樹 PostOrderTraverse(T->rchild);//遞迴遍歷右子樹 /*對根節點操作*/ cout<<T->data<<"->"; } int main(){ BiTree T; cout<<endl<<endl<<"InOrderTraverse.cpp By:WJX"<<endl; cout<<endl<<endl<<"=========================="<<endl; cout<<endl<<endl<<"Please input data to create BiTree:"<<endl; CreateBiTree(T); //輸出前序遍歷的結果 cout<<endl<<"PreOrder :"<<endl<<endl<<"Begin->"; PreOrderTraverse(T); cout<<"END !"<<endl<<endl<<"...OK!..."<<endl; //輸出中序遍歷的結果 cout<<endl<<"InOrder :"<<endl<<endl<<"Begin->"; InOrderTraverse(T); cout<<"END !"<<endl<<endl<<"...OK!..."<<endl; //輸出後序遍歷的結果 cout<<endl<<"PostOrder :"<<endl<<endl<<"Begin->"; PostOrderTraverse(T); cout<<"END !"<<endl<<endl<<"...OK!..."<<endl; getch(); }