图的开始--第四天打卡之树的遍历
作者:
lgd123
,
2021-07-28 17:42:37
,
所有人可见
,
阅读 216
/*树的遍历
1、树的遍历是指:从根节点出发,按照某种顺序依次遍历树上的每一个点,且只遍历一次
2、树的遍历方法有:前序遍历,中序遍历和后序遍历
3、对于前序遍历:按照根节点,左子树,右子树的顺序遍历
4、对于中序遍历:按照左子树,根节点,右子树的顺序遍历
5、对于后序遍历:按照左子树,右子树,根节点的顺序遍历
*/
----------
#include<iostream>
#include<cstring>
using namespace std;
const int N =10010;
int n ;
struct node
{
int p,l,r;
}T[N];
//前序遍历:
void prePares(int u)
{
if(u==-1) return ;
cout<<" "<<u;
prePares(T[u].l);
prePares(T[u].r);
}
//中序遍历
void inPares(int u)
{
if(u==-1) return ;
inPares(T[u].l);
cout<<" "<<u;
inPares(T[u].r);
}
//后序遍历
void postParse(int u)
{
if(u==-1) return ;
postParse(T[u].l);
postParse(T[u].r);
cout<<" "<<u;
}
int main()
{
int l ,v, r,root = 0;
cin>>n;
memset(T,-1,sizeof(T));
for(int i = 0 ; i < n ; i ++)
{
cin>>v>>l>>r;
T[v].l = l;
T[v].r = r;
if(l!=-1) T[l].p = v;
if(r!=-1) T[r].p = v;
}
for(int i = 0;i < n; i ++)
{
if(T[i].p==-1) root = i;
}
cout<<"Preorder"<<endl;
prePares(root);
cout<<endl;
cout<<"Inorder"<<endl;
inPares(root);
cout<<endl;
cout<<"Postorder"<<endl;
postParse(root);
cout<<endl;
return 0;
}