结构体数组存储 递归实现
#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <algorithm>
using namespace std;
typedef long long ll;
#define maxn 1000005
#define mod 7654321
#define NIL -1
struct Tree
{
int parent,left,right;
}T[maxn];
void PreTraversal(int u)
{
if(u==NIL)
return;
cout<<" "<<u;
PreTraversal(T[u].left);
PreTraversal(T[u].right);
}
void InTraversal(int u)
{
if(u==NIL)
return;
InTraversal(T[u].left);
cout<<" "<<u;
InTraversal(T[u].right);
}
void PostTraversal(int u)
{
if(u==NIL)
return;
PostTraversal(T[u].left);
PostTraversal(T[u].right);
cout<<" "<<u;
}
void SequenceTraversal(int u)
{
queue<int> q;
q.push(u);
while(!q.empty())
{
int temp=q.front();
cout<<" "<<temp;
if(T[temp].left!=NIL)
q.push(T[temp].left);
if(T[temp].right!=NIL)
q.push(T[temp].right);
q.pop();
}
}
int main()
{
int value,l,r,root=0;
int n;
cin>>n;
for(int i=0;i<n;i++) T[i].parent=NIL;
for(int i=0;i<n;i++)
{
cin>>value>>l>>r;
T[value].left=l;
T[value].right=r;
if(l!=NIL) T[l].parent=value;
if(r!=NIL) T[r].parent=value;
}
for(int i=0;i<n;i++)
if(T[i].parent==NIL)
root=i;
cout<<"PreTraversal"<<endl;
PreTraversal(root);cout<<endl;
cout<<"InTraversal"<<endl;
InTraversal(root);cout<<endl;
cout<<"PostTraversal"<<endl;
PostTraversal(root);cout<<endl;
cout<<"SequenceTraversal"<<endl;
SequenceTraversal(root);cout<<endl;
return 0;
}