输入
第一行:二叉树中的结点个数n
之后的n行中,每一行包含两个数据 :
number: 代表结点在完全二叉树中的层序编号(根节点编号是1)
value: char 型的数据,代表结点的值
输出
三行
第一行为前序遍历序列
第二行为中序遍历序列
第三行为后序遍历序列
样例输入
3 1 a 2 b 3 c样例输出
abc bac bca
代码:
#include<iostream>
using namespace std;
class SeqTree
{
public:
SeqTree(int n)
{
Creat(n);
}
void Creat(int n);
void PreOrder(int i,int n);
void InOrder(int i,int n);
void PostOrder(int i,int n);
char ch[100];
};
void SeqTree::Creat(int n)
{
char t;
t=(char)n;
ch[0]=t;
for(int i=1;i<=n;i++)
{
cin>>i;
cin>>ch[i];
}
}
void SeqTree::PreOrder(int i,int n)
{
if(ch[i]!='#')
cout<<ch[i];
else return;
if (2*i<=n)
PreOrder(2*i,n);
if (2*i+1<=n)
PreOrder(2*i+1,n);
}
void SeqTree::InOrder(int i,int n)
{
if (2*i<=n)
PreOrder(2*i,n);
if (ch[i]!= '#')
cout<<ch[i];
else return;
if (2*i+1<=n)
PreOrder(2*i+1,n);
}
void SeqTree::PostOrder(int i,int n)
{
if(2*i<=n)
PreOrder(2*i,n);
if(2*i+1<=n)
PreOrder(2*i+1,n);
if(ch[i]!='#')
cout<<ch[i];
else return;
}
int main()
{
int n;
cin>>n;
SeqTree T(n);
T.PreOrder(1,n);
cout<<endl;
T.InOrder(1,n);
cout<<endl;
T.PostOrder(1,n);
cout<<endl;
return 0;
}
本文详细介绍了二叉树的前序、中序和后序遍历算法,并通过一个具体的例子展示了如何使用C++实现这些遍历过程。文章首先解释了输入数据的格式,即给出二叉树的节点数量和每个节点的编号及值,然后通过代码实现了遍历算法,最后给出了样例输入和输出,帮助读者理解二叉树遍历的基本概念。
1968

被折叠的 条评论
为什么被折叠?



