#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);//二叉树的层次遍历。*/
}
树的构造及其遍历(转)
最新推荐文章于 2023-02-20 23:04:21 发布