资源简介
假设以如下说明的三元组 (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
- 上一篇:电子商务毕业论文
- 下一篇:网络故障排查步骤和方法,教你怎么排查网络问题
相关资源
- 二叉树基本操作源代码
- 数据结构图形化演示,里面有动态查
- 二叉树遍历图形化演示
- 数据结构经典算法代码实现
- 经典算法flash动画演示
- 根据二叉树的抽象数据类型的定义,
- 基于平衡二叉树实现的用户登入系统
- 数据结构与算法综合实验—二叉树与
- btree.zip实现二叉树的可视化处理,很
- 实现二叉树的可视化处理,很好的源
- 《数据结构与算法》第四次课内容安
- 山东大学软件学院数据结构实验五二
- 期权定价公式二叉树推导与分析
- 数据结构课程设计线索二叉树
- 五个汇编小程序,乘法表,俄罗斯方
- 数据结构综合课设二叉树的建立与遍
- 数据结构实验报告8-树-求二叉树先序
- 树的基本运算:创建树;输出树凹入
- 平衡二叉树旋转操作,插入,删除,
- 二叉树课程设计
- ——搜索二叉树的插入,查找和删除
- 二叉树的实现各种遍历算法
- 前缀和后缀表达式建二叉树
- 数据结构课程设计二叉树的非递归遍
- 二叉树三种遍历动画演示
- 树与二叉树相互转换 树的遍历 源代码
- 数据结构二叉树家谱管理系统
- 数据结构关于二叉树的各种算法
- 数据结构课程设计 线索二叉树
- 二叉树深度+建树+查找+遍历二叉树
评论
共有 条评论