这个算法中的构建一棵二叉树用的是前序和中序来构建二叉树的。
层次遍历当然要用到队列了。
#include<iostream> #include<malloc.h> #include<queue> #include<list> using namespace std; struct node { char c; node *lchild,*rchild; }; char pre[100],mid[100]; void build(node* &t,int start1,int end1,int start2,int end2) { int i=start2; while(pre[start1]!=mid[i]) i=i+1; t=(node*)malloc(sizeof(node)); t->c=pre[start1]; if(i==start2) t->lchild=NULL; else build(t->lchild,start1+1,start1+i-start2,start2,i-1); if(i==end2) t->rchild=NULL; else build(t->rchild,start1+i-start2+1,end1,i+1,end2); } list<node*> que; void visit(node *t) { que.push_back(t); while(!que.empty()) { node *temp=que.front(); cout<<temp->c; if(temp->lchild!=NULL) que.push_back(temp->lchild); if(temp->rchild!=NULL) que.push_back(temp->rchild); que.pop_front(); } cout<<endl; } void last(node *t) { if(t==NULL) return; if(t->lchild!=NULL) last(t->lchild); if(t->rchild!=NULL) last(t->rchild); cout<<t->c; } int main() { node *tree; int length; while(1==1) { cout<<"pre"<<endl; cin>>pre; cout<<"mid"<<endl; cin>>mid; length=strlen(pre); build(tree,0,length-1,0,length-1); //last(tree); if(!que.empty()) que.clear(); visit(tree); } return 0; }
构建一棵二叉树并按照层次遍历输出,布布扣,bubuko.com
原文:http://blog.csdn.net/killer_in_silence/article/details/23046307