樹的輸入、儲存與遍歷
阿新 • • 發佈:2018-12-25
問題描述:輸入一棵二叉樹,使用二叉連結串列結構儲存二叉樹,並用遞迴方法輸出先序、中序、後序三種遍歷結果。
#include<iostream> #include<cstdlib> using namespace std; typedef struct BiTNode { char data; BiTNode *lchild, *rchild; }BiTNode,*BiTree; void CreateBiTree(BiTree &T) {//以先序輸入資料 char ch; ch=getchar(); if(ch==' ') T=NULL; else { if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) exit(0); T->data = ch; CreateBiTree(T->lchild); CreateBiTree(T->rchild); } } void PreOrderTraverse(BiTree &T) {//先序遍歷 if(T==NULL) return; if(T->data!=' ') cout<<T->data; PreOrderTraverse(T->lchild); PreOrderTraverse(T->rchild); } void InOrderTraverse(BiTree &T) {//中序遍歷 if(T==NULL) return; InOrderTraverse(T->lchild); if(T->data!=' ') cout<<T->data; InOrderTraverse(T->rchild); } void PostOrderTraverse(BiTree &T) {//後序遍歷 if(T==NULL) return; PostOrderTraverse(T->lchild); PostOrderTraverse(T->rchild); if(T->data!=' ') cout<<T->data; } int main() { BiTree T; cout<<"Enter the numbers(Preorder):"<<endl; CreateBiTree(T); cout<<"The Preorder is:"<<endl; PreOrderTraverse(T); cout<<endl; cout<<"The Inorder is:"<<endl; InOrderTraverse(T); cout<<endl; cout<<"The Posteorder is:"<<endl; PostOrderTraverse(T); cout<<endl; return 0; }