资源简介

假设以如下说明的三元组 (F、C、L/R) 序列输入一棵二叉树的诸边(其中 F 表示双亲结点的标识,C 表示孩子结点标识,L/R 表示 C 为 F 的左孩子或右孩子),且在输入的三元组序列中,C 是按层次顺序出现的。设结点的标识是字符类型。F=‘^’时 C 为根结点标识,若 C 亦为‘^’,则表示输入结束。试编写算法,由输入的三元组序列建立二叉树的二叉链表,并以中序序列输出。 ^AL ABL ACR BDL CEL CFR DGR FHL ^^L

资源截图

代码片段和文件信息

#include
#include

//定义二叉树的结构类型
typedef struct a{
struct a* L;
struct a* R;
char c;
}binarytype;

//对于给定的一个字符ch以及一个标志R或L的字符lebal,将其存入二叉树T结点中,right返回1,error返回0
int putchs(binarytype *Tchar chchar lebal);
//创建一个二叉树空结点,right返回1,error返回0
int initbinarytree(binarytype *T);
//用前序遍历的方式找到二叉树T中字符ch所在的结点,然后将地址给e,成功返回1,失败返回0
binarytype* visit1(binarytype *Tchar ch);
//中序遍历二叉树,并输出其中元素内容
int visit2(binarytype *T);
//将三元组数组chars存入T中,成功返回1,异常返回0
int save(binarytype *Tchar* chars);

int main(void)
{
char chars[]=“^AL  ABL  ACR  BDL  CEL  CFR  DGR  FHL ^^L“;
binarytype *T;

if(!(T=(binarytype*)malloc(sizeof(binarytype))))
return 0;
(*T).c = NULL;
(*T).R = NULL;
(*T).L = NULL;
if(!save(Tchars)) return 0;
if(!visit2(T)) return 0;
return 1;
}




//对于给定的一个字符ch以及一个标志R或L的字符lebal,将其存入二叉树T结点中,right返回1,error返回0
int putchs(binarytype *Tchar chchar lebal)
{
binarytype *T1;
if(!(*T).c)
{
(*T).c = ch;
(*T).L = NULL;
(*T).R = NULL;
return 1;
}
if(!(T1=(binarytype*)malloc(sizeof(binarytype))))
return 0;
(*T1).c = ch;
(*T1).L = NULL;
(*T1).R = NULL; 
if(lebal==‘R‘)
(*T).R = T1;
else
(*T).L = T1;
return 1;
}

//将三元组数组chars存入T中,成功返回1,异常返回0
int save(binarytype *Tchar* chars)
{
int i=0;
binarytype *T1;
T1 = NULL;

T1 = T;
while(chars[i])
{
if(chars[i]==‘ ‘)
{
i++;
continue;
}//if
if(chars[i]==‘^‘&&chars[i+1]!=‘^‘)
{
if(chars[i+2]!=‘L‘&&chars[i+2]!=‘R‘)
return 0;
putchs(Tchars[i+1]chars[i+2]);
i += 3;
continue;
}//if
if(chars[i]==‘^‘&&chars[i+1]==‘^‘)
return 1;
if(chars[i]!=‘^‘)
{
if(!(T1=visit1(Tchars[i])))
return 0;
putchs(T1chars[i+1]chars[i+2]);
i += 3;
continue;
}//if
}//while
return 1;
}
//用前序遍历的方式找到二叉树T中字符ch所在的结点,然后将地址给e,成功返回1,失败返回0
binarytype* visit1(binarytype *Tchar ch)
{
if(!T)
return 0;
if((*T).c==ch)
return T;
if(visit1((*T).Lch))
return visit1((*T).Lch);
if(visit1((*T).Rch))
return visit1((*T).Rch);
return 0;
}

//中序遍历二叉树,并输出其中元素内容
int visit2(binarytype *T)
{
if(!T)
return 0;
visit2((*T).L);
printf(“%c  “(*T).c);
visit2((*T).R);
return 1;
}

//创建一个二叉树空结点,right返回1,error返回0
int initbinarytree(binarytype *T)
{
if(!(T=(binarytype*)malloc(sizeof(binarytype))))
return 0;
(*T).c = NULL;
(*T).R = NULL;
(*T).L = NULL;
return 1;
}



 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-04-25 07:50  胡扯也有理\
     目录           0  2013-04-25 07:48  胡扯也有理\Debug\
     文件       33792  2013-04-25 07:50  胡扯也有理\Debug\vc60.idb
     文件       53248  2013-04-25 07:48  胡扯也有理\Debug\vc60.pdb
     文件      172111  2013-04-25 07:48  胡扯也有理\Debug\胡扯也有理.exe
     文件      173760  2013-04-25 07:48  胡扯也有理\Debug\胡扯也有理.ilk
     文件        6542  2013-04-25 07:48  胡扯也有理\Debug\胡扯也有理.obj
     文件      220304  2013-04-25 07:28  胡扯也有理\Debug\胡扯也有理.pch
     文件      427008  2013-04-25 07:48  胡扯也有理\Debug\胡扯也有理.pdb
     文件        2707  2013-04-25 07:48  胡扯也有理\胡扯也有理.cpp
     文件        4334  2013-04-25 07:38  胡扯也有理\胡扯也有理.dsp
     文件         528  2013-04-25 06:43  胡扯也有理\胡扯也有理.dsw
     文件       33792  2013-04-25 07:50  胡扯也有理\胡扯也有理.ncb
     文件       48640  2013-04-25 07:50  胡扯也有理\胡扯也有理.opt
     文件         912  2013-04-25 07:48  胡扯也有理\胡扯也有理.plg

评论

共有 条评论