数据结构树的一维数组递归的三种方式
一维数组的定义
typedef char elem;
typedef struct Tree{
elem e[Max_size];
int num;//树的结点总数
int deep;//树的深度
}tree;
前期准备
int deepth(int a)
{
return (int)(log2(a*1.0))+1;
}//返回节点的深度
int trantree(tree &t,elem e[],int i)
{
elem a[Max_size];
int j=1,k=0,word=0;
if(e[j]’)’)
return 0;
t.e[i]=e[j];
t.num++;
j++;
if(e[j]’(’){
k=0;
word=0;
do{
if(e[j]’(’)
word++;
else if(e[j]’)’)
word–;
a[k]=e[j];
j++;
k++;
}while(word!=0);
a[k]=’\0’;
trantree(t,a,i2);
}
if(e[j]’(’){
k=0;
word=0;
do{
if(e[j]’(’)
word++;
else if(e[j]==’)’)
word–;
a[k]=e[j];
j++;
k++;
}while(word!=0);
a[k]=’\0’;
trantree(t,a,i2+1);
}
}//把输入的结构转化成树的一维储存结构
先序遍历
int digui_xianxu(tree t,int i,int deeps){
if(deepth(i)>t.deep||deeps!=deepth(i))
return 0;
if(t.e[i]!=’ '){
printf("%c ",t.e[i]);
digui_xianxu(t,2i,deeps+1);
digui_xianxu(t,2i+1,deeps+1);
}
}
中序遍历
int digui_zhongxu(tree t,int i,int deeps){
if(deepth(i)>t.deep) return 0;
digui_zhongxu(t,i2,deeps+1);
if(t.e[i]!=’ ')
printf("%c ",t.e[i]);
digui_zhongxu(t,i2+1,deeps+1);
}
后序遍历
int digui_houxu(tree t,int i,int deeps){
if(deepth(i)>t.deep) return 0;
digui_houxu(t,i2,deeps+1);
digui_houxu(t,i2+1,deeps+1);
if(t.e[i]!=’ ')
printf("%c ",t.e[i]);
}

本文介绍了如何使用一维数组表示数据结构中的树,并提供了前序遍历、中序遍历和后序遍历的递归实现方法。通过深度计算和递归调用来解析输入的结构并进行不同顺序的遍历。

2471

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



