1.双亲表示法
#include<iostream>
#include<cstdio>
#define maxn 1111
using namespace std;
typedef struct node
{
char data;//节点的值
int parent;//该节点的父亲
}node;
typedef struct tree
{
node treelist[maxn];//节点
int length;//节点个数
int r; //存放根节点
}Tree;
void init(Tree &tree) //初始化树
{
tree.length=0;
}
void create(Tree &tree)//以表的方式输入
{
for(int i=0;i<tree.length;i++)
cin>>tree.treelist[i].data>>tree.treelist[i].parent;
}
void Print(Tree &tree)
{
for(int i=0;i<tree.length;i++)
cout<<tree.treelist[i].data<<' '<<tree.treelist[i].parent<<endl;
}
void preorder(Tree &tree,int num)//前序遍历
{
if(tree.length==num) return ;
cout<<tree.treelist[num].data;
for(int i=num+1;i<tree.length;i++)
if(tree.treelist[i].parent==num) preorder(tree,i);
}
void postorder(Tree &tree,int num)//后序遍历
{
if(tree.length==num) return ;
for(int i=num+1;i<tree.length;i++)
if(tree.treelist[i].parent==num) postorder(tree,i);
cout<<tree.treelist[num].data;
}
int main()
{
Tree tree;
init(tree);
cin>>tree.length;
create(tree);
Print(tree);
preorder(tree,0);
cout<<endl;
postorder(tree,0);
re