递归建立普通二叉树两种方式遍历

来源:互联网 发布:2017淘宝违规考试答案 编辑:程序博客网 时间:2024/06/05 01:11
#include<bits/stdc++.h>using namespace std;struct BinNode{char data;BinNode* lchild;BinNode* rchild;};int CreateBinTree1(BinNode* &T)//建立时候按先序建立,先画出来对照先序输入中间无空格{char data;data=getchar();if(data=='#')T=NULL;else{T=new BinNode();T->data=data;CreateBinTree1(T->lchild);CreateBinTree1(T->rchild);}return 0;}void Visit(BinNode* &T){if(T->data!='#')cout<<T->data<<" ";}void PreOrder(BinNode* &T){if(T!=NULL){Visit(T);PreOrder(T->lchild);PreOrder(T->rchild);}}void MidOrder(BinNode* &T){if(T!=NULL){MidOrder(T->lchild);Visit(T);MidOrder(T->rchild);}}void PostOrder(BinNode* &T){if(T!=NULL){PostOrder(T->lchild);PostOrder(T->rchild);Visit(T);}}void PreOrder2(BinNode* &T){stack<BinNode*> stack;BinNode* p=T;while(p||!stack.empty()){if(p!=NULL){stack.push(p);cout<<p->data<<" ";p=p->lchild;}else{p=stack.top();stack.pop();p=p->rchild;}}}void MinOrder2(BinNode* &T){BinNode* p=T;stack<BinNode*> stack;while(p||!stack.empty()){if(p!=NULL){stack.push(p);p=p->lchild;}else{p=stack.top();stack.pop();cout<<p->data<<" ";p=p->rchild;}}}struct Bin{BinNode* node;char flag;};void PostOrder2(BinNode* &T){stack<Bin*> stack;BinNode* p=T;Bin* b;while(p!=NULL||!stack.empty()){while(p!=NULL){b=new Bin;b->node=p;b->flag='L';stack.push(b);p=p->lchild;}while(!stack.empty()&&(stack.top())->flag=='R'){b=stack.top();stack.pop();cout<<b->node->data<<" ";}if(!stack.empty()){b=stack.top();b->flag='R';p=b->node;p=p->rchild;}}}int main(){BinNode* T=NULL;CreateBinTree1(T);PreOrder(T);cout<<endl;MidOrder(T);cout<<endl;//char* ch="111";//cout<<*ch;PostOrder(T);cout<<endl;PreOrder2(T);cout<<endl;MinOrder2(T);cout<<endl;PostOrder2(T);return 0;}


 
原创粉丝点击