#include <iostream> #include <bits/stdc++.h> using namespace std; const int MA=100; template<class T> struct ThrBiNode { T data; BiNode<T> *lchild; BiNode<T> *rchild; }; template<class T> class BiTree { public: BiTree(){root=creat(root);} ~BiTree(){release(root);} void preorder(){preorder(root);} void inorder(){inorder(root);} void postorder(){postorder(root);} void levelorder(); private: BiNode<T> *root; void preorder(BiNode<T> *bt); void inorder(BiNode<T> *bt); void postorder(BiNode<T> *bt); BiNode<T> *creat(BiNode<T> *bt); void release(BiNode<T> *bt); }; template<class T> BiNode<T>* BiTree<T>::creat(BiNode<T>* bt) { T ch; cin>>ch; if(ch=='#') bt=NULL; else { bt=new BiNode<T>; bt->data=ch; bt->lchild=creat(bt->lchild); bt->rchild=creat(bt->rchild); } return bt; } template<class T> void BiTree<T>::release(BiNode<T> *bt) { if(bt!=NULL) { release(bt->lchild); release(bt->rchild); delete bt; } } template<class T> void BiTree<T>::preorder(BiNode<T> *bt) { if(bt==NULL) return; else { cout<<bt->data; preorder(bt->lchild); preorder(bt->rchild); } } template<class T> void BiTree<T>::inorder(BiNode<T> *bt) { if(bt==NULL) return; else { inorder(bt->lchild); cout<<bt->data; inorder(bt->rchild); } } template<class T> void BiTree<T>::postorder(BiNode<T> *bt) { if(bt==NULL) return; else { postorder(bt->lchild); postorder(bt->rchild); cout<<bt->data; } } template<class T> void BiTree<T>::levelorder() { int front=0,rear=00; BiNode<T> *Q[MA]; if(root==NULL) return; Q[rear++]=root; while(front!=rear) { BiNode<T> *q=Q[front++]; cout<<q->data; if(q->lchild!=NULL) Q[rear++]=q->lchild; if(q->rchild!=NULL) Q[rear++]=q->rchild; } } int main() { //freopen("D:\\input.txt","r",stdin); BiTree<char> tree; cout<<" 前序遍历: "; tree.preorder(); cout<<endl; cout<<" 中序遍历: "; tree.inorder(); cout<<endl; cout<<" 后序遍历: "; tree.postorder(); cout<<endl; cout<<" 层序遍历: "; tree.levelorder(); cout<<endl; return 0; }
二叉树遍历递归实现(前中后与层序遍历)
猜你喜欢
转载自blog.csdn.net/qq_40475529/article/details/80316886
今日推荐
周排行