#include <iostream> #include<algorithm> #include<stdlib.h> #include<stdio.h> #include<string.h> #include<math.h> #include<deque> #include<queue> #include<vector> #include<stack> using namespace std; struct tree { char c; tree *lchild; tree *rchild; }; tree *build(tree *T) { char c; cin>>c; if(c=='#') T=NULL; else { T=new tree; T->c=c; T->lchild=build(T->lchild); T->rchild=build(T->rchild); } return T; } void preorder1(tree *T) { if(T!=NULL) { cout<<T->c; preorder1(T->lchild); preorder1(T->rchild); } } void preorder2(tree *T) { if(T!=NULL) { preorder2(T->lchild); cout<<T->c; preorder2(T->rchild); } } void preorder3(tree *T) { if(T!=NULL) { preorder3(T->lchild); preorder3(T->rchild); cout<<T->c; } } /*void preorder4(tree *T) { deque<tree*>p; if(T!=NULL)//树不为空,把树的根压入队列。 { p.push_back(T); } while(!p.empty())//队列不为空 { tree*TT; TT=p.front();//取出队首元素。 p.pop_front(); cout<<TT->c; if(TT->lchild!=NULL)//左子树存在,压入队尾。 { p.push_back(TT->lchild); } if(TT->rchild!=NULL)//右子树存在,压入队尾。 { p.push_back(TT->rchild); } } }*/ int main() { tree *T; T=build(T);//二叉树的建立。 preorder1(T);//二叉树的前序遍历。 cout<<endl; preorder2(T);//二叉树的中序遍历。 cout<<endl; preorder3(T);//二叉树的后序遍历。 /*cout<<endl; preorder4(T);//二叉树的层次遍历。*/ }
树的构造及其遍历(转)
猜你喜欢
转载自blog.csdn.net/najiuzheyangbaacm/article/details/80632697
今日推荐
周排行