资源简介
假设以如下说明的三元组 (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
- 上一篇:电子商务毕业论文
- 下一篇:网络故障排查步骤和方法,教你怎么排查网络问题
相关资源
- 数据结构-树与二叉树算法汇总
- 二叉树建立 二叉树基本算法的实现
- 二叉树给期权定价.rar
- 字母赫夫曼编码01序列解码
- 线索二叉树的建立遍历(非递归前中
- 数据结构 建立二叉树二叉链表存储结
- 二叉树指定第i层输出以及打印叶子结
- 求二叉树最大宽度 求二叉树最大宽度
- 二叉树先序、中序、后序三种遍历的
- 用二叉树实现学生健康情况管理系统
- 平衡二叉树完整代码创建,插入,旋
- 由俩中遍历序列恢复二叉树
- 广州大学 数据结构实验报告 实验二
- 数据结构试验3-二叉树实验报告含源码
- 用二叉树表示家谱关系并实现各种查
- 二叉树需要的的5个基本操作运算
- 树与二叉树的转换
- 数据结构二叉树实验报告源代码及运
- c编写的数据结构创建顺序表、链表、
- 数据结构算法二叉树实现
- 根据输入一组数据,建立有序二叉树
- 二叉树遍历实验报告
- 广工数据结构课程设计实验-二叉树的
- 面试题目集锦--二叉树
- 二叉排序树与平衡二叉树的实现
- 华科计算机学院数据结构二叉树实验
- 打印二叉树形状 画二叉树的图
- 二叉树的三种遍历swf
- 用二叉树实现中缀表达式转换成后缀
- 数据结构:二叉树的应用
评论
共有 条评论