排序二叉树的应用 数据结构课程设计报告
数据结构试验报告 二叉排序树的操作

数据结构实验报告班级:信息与计算科学专业1102班学号: 1108060214姓名:朱晓东设计日期:2013.6.6西安科技大学计算机学院1.实验报告编写一个演示运用二叉排序树进行数据的的排序、插入、删除、查找等操作的程序。
2.需求分析本演示程序用vc6.0编写,完成数据的排序功能,同时能够进行数据的创建、插入、删除、查找。
(1)输入的形式和输入值的范围:创建二叉排序树时输入较多的值;插入元素时需要输入插入的元素的值;删除元素时输入元素的值;查找操作时需要输入元素的值。
所有输入中,元素的值都是整数。
(2)输出的形式:在创建、插入、删除的操作后,均显示操作后的元素的排序状况,有小到大排序。
(3)程序所能达到的功能:完成二叉排序树的生成、插入、删除、查找操作。
(4)测试数据:①插入操作中依次输入10 9 11 8 12 0(本程序是以0元素为为结束标志);②查找操作中输入13;③插入操作中输入13;3概要设计本程序包含8个函数:(1)主函数main()(2)创建二叉排序树函数BSTCreate(BiTree* bt)(3)显示操作菜单函数menu()(4)显示二叉排序树的内容函数BSTShow(BiTree bt)(5)插入元素函数BSTInsert(BiTree* bt,DataType key)(6)删除元素函数BSTDelete(BiTree* bt,DataType key)(7)查找元素函数BSTSearch(BiTree bt,DataType key)(8)查找要删除的元素的函数DeleteNode(BiTree* bt)各函数之间的关系如下:BSTCreate(BiTree* bt)menu()BSTShow(BiTree bt)mainBSTInsert(BiTree* bt,DataType key)BSTDelete(BiTree* bt,DataType key) DeleteNode(BiTree* bt)BSTSearch(BiTree bt,DataType key)4.详细设计实现概要设计中定义的所有数据类型,对每个操作给出伪码算法。
二叉排序实现课程设计

二叉排序实现课程设计一、课程目标知识目标:1. 理解二叉排序树的基本概念,掌握其结构特点及操作原理;2. 学会使用二叉排序树进行数据排序,并掌握二叉排序树的插入、删除、查找等基本操作;3. 了解二叉排序树与其他排序算法的优缺点,明确其适用场景。
技能目标:1. 能够独立构建二叉排序树,进行数据的排序与查找;2. 能够分析并解决二叉排序树在实际应用中遇到的问题,如平衡二叉树、优化查找效率等;3. 能够运用所学知识,解决实际生活中的排序问题。
情感态度价值观目标:1. 培养学生的逻辑思维能力和问题解决能力,使其在面对复杂问题时,能够运用所学知识进行分析和解决;2. 增强学生的团队协作意识,通过小组讨论和实践,培养学生的沟通能力和合作精神;3. 激发学生的学习兴趣,使其在掌握二叉排序树的基础上,探索更多数据结构与算法的知识,为以后的学习打下坚实基础。
课程性质:本课程为数据结构与算法领域的基础课程,旨在帮助学生掌握二叉排序树的基本概念与操作方法,提高其编程实践能力。
学生特点:学生具备一定的编程基础,熟悉基本的数据结构和算法,但对二叉排序树的理解和应用尚浅。
教学要求:结合学生特点,注重理论与实践相结合,通过案例分析和动手实践,使学生深入理解二叉排序树,提高其编程水平。
同时,注重培养学生的逻辑思维和团队协作能力,提高其综合素质。
二、教学内容1. 引言:介绍排序算法在计算机科学中的应用,引出二叉排序树的概念及其重要性。
- 排序算法概述- 二叉排序树的基本概念2. 二叉排序树的构建与性质:- 二叉排序树的定义及结构- 二叉排序树的构建方法- 二叉排序树的性质与判定3. 二叉排序树的基本操作:- 插入操作- 删除操作- 查找操作- 遍历操作4. 二叉排序树的优化与应用:- 平衡二叉树的概念及实现- 二叉排序树在实际应用中的优化- 二叉排序树与其他排序算法的性能比较5. 实践与案例分析:- 动手实践:构建二叉排序树,实现基本操作- 案例分析:解决实际问题,分析二叉排序树的优缺点教学内容安排与进度:1. 引言与二叉排序树的构建:1课时2. 二叉排序树的基本操作:2课时3. 二叉排序树的优化与应用:2课时4. 实践与案例分析:3课时教材章节关联:1. 《数据结构与算法》第三章:树与二叉树2. 《数据结构与算法》第四章:二叉树的应用教学内容旨在帮助学生系统地掌握二叉排序树的相关知识,结合实践与案例分析,提高学生的编程实践能力和问题解决能力。
数据结构二叉树应用课程设计含源代码实现

递归法的先序遍历:按照输出根、输出左孩子、输出右孩子的顺
序来递归的调用先序遍历函数。
递归法的中序遍历:输出左孩子、按照输出根、输出右孩子的顺
2 / 17
序来递归的调用中序遍历函数。 递归法的后序遍历:输出左孩子、输出右孩子、按照输出根的顺
序来递归的调用后序遍历函数。 二叉树的先序、中序、后序遍历的非递归方法是要借助数据结构
层序遍历。求二叉树的高度、宽度,结点数。判断是否为二叉排序树。
[ห้องสมุดไป่ตู้本要求]
(1) 从文件中读入建树信息,树的节点数目不小于 20 个,树的高
度不小于 4。
(2) 采用二叉链表结构。
(3) 至少 2 组输入数据,分别是二叉排序树和不是二叉排序树。
3.2 数据结构
***********************************************************
typedef struct
{
SElemType *base; //栈底指针
SElemType *top;
//栈顶指针
int stacksize;
//栈的容量
}SqStack;
//栈
3.3 算法设计思想
首先从文件中读取二叉树,按照先序遍历的顺序递归建树,先建
立它的左子树,再建立它的右子树,最后递归结束,整棵树构建成功!
cout<<"文件打开失败!请重试!"<<endl; exit(0); } ReadFile>>sum; while(sum--) { cout<<"case:"<<++case1<<endl; CreatBiTree(Head, ReadFile);
数据结构课程设计说明书-排序二叉树的建立及遍历的实现

课程设计任务书学生姓名: XXX 专业班级:计算机0502指导教师: XXX 工作单位:计算机科学与技术学院题目: 二叉排序树的建立及遍历的实现初始条件:理论:学习了《数据结构》课程,掌握了基本的数据结构和常用的算法;实践:计算机技术系实验室提供计算机及软件开发环境。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、系统应具备的功能:(1)建立二叉排序树;(2)中序遍历二叉排序树并输出排序结果;2、数据结构设计;3、主要算法设计;4、编程及上机实现;5、撰写课程设计报告,包括:(1)设计题目;(2)摘要和关键字;(3)正文,包括引言、需求分析、数据结构设计、算法设计、程序实现及测试、设计体会等;(4)结束语;(5)参考文献。
时间安排:2007年7月2日-7日(第18周)7月2日查阅资料7月3日系统设计,数据结构设计,算法设计7月4日-5日编程并上机调试7月6日撰写报告7月7日验收程序,提交设计报告书。
指导教师签名: 2007年7月2日系主任(或责任教师)签名: 2007年7月2日排序二叉树的建立及其遍历的实现摘要:我所设计的课题为排序二叉树的建立及其遍历的实现,它的主要功能是将输入的数据组合成排序二叉树,并进行,先序,中序和后序遍历。
设计该课题采用了C语言程序设计,简洁而方便,它主要运用了建立函数,调用函数,建立递归函数等等方面来进行设计。
关键字:排序二叉树,先序遍历,中序遍历,后序遍历0.引言我所设计的题目为排序二叉树的建立及其遍历的实现。
排序二叉树或是一棵空树;或是具有以下性质的二叉树:(1)若它的左子树不空,则作子树上所有的结点的值均小于它的根结点的值;(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)它的左,右子树也分别为二叉排序树。
对排序二叉树的建立需知道其定义及其通过插入结点来建立排序二叉树,遍历及其输出结果。
该设计根据输入的数据进行建立排序二叉树。
数据结构-二叉排序树

二叉排序树操作一、设计步骤1)分析课程设计题目的要求2)写出详细设计说明3)编写程序代码,调试程序使其能正确运行4)设计完成的软件要便于操作和使用5)设计完成后提交课程设计报告(一)程序功能:1)创建二叉排序树2)输出二叉排序树3)在二叉排序树中插入新结点4)在二叉排序树中删除给定的值5)在二叉排序树中查找所给定的值(二)函数功能:1) struct BiTnode 定义二叉链表结点类型包含结点的信息2) class BT 二叉排序树类,以实现二叉排序树的相关操作3) InitBitree() 构造函数,使根节点指向空4) ~BT () 析构函数,释放结点空间5) void InsertBST(&t,key) 实现二叉排序树的插入功能6) int SearchBST(t,key) 实现二叉排序树的查找功能7) int DelBST(&t,key) 实现二叉排序树的删除功能8) void InorderBiTree (t) 实现二叉排序树的排序(输出功能)9) int main() 主函数,用来完成对二叉排序树类中各个函数的测试二、设计理论分析方法(一)二叉排序树定义首先,我们应该明确所谓二叉排序树是指满足下列条件的二叉树:(1)左子树上的所有结点值均小于根结点值;(2)右子数上的所有结点值均不小于根结点值;(3)左、右子数也满足上述两个条件。
根据对上述的理解和分析,我们就可以先创建出一个二叉链表结点的结构体类型(struct BiTNode)和一个二叉排序树类(class BT),以及类中的构造函数、析构函数和其他实现相关功能的函数。
(二)插入函数(void InsertBST(&t,key))首先定义一个与BiTNode<k> *BT同一类型的结点p,并为其申请空间,使p->data=key,p->lchild和p->rchild=NULL。
二叉排序树实验报告

深圳大学实验报告
课程名称:数据结构实验与课程设计
实验项目名称:二叉排序树实验
学院:计算机与软件学院
专业:
指导教师:
报告人:学号:班级: 3班
实验时间: 2012-11-28 实验报告提交时间: 2012-12-5
教务部制
int main(int argc,char *argv[])
{
int t[32];
int i,j,Key;
int TestNum,SampleNum;
// freopen("cin.txt","r",stdin);
// freopen("cout.txt","w",stdout);
BiSortTree *BST=new BiSortTree;
cin>>TestNum;
for(i=0;i<TestNum;i++){
cin>>SampleNum;
for(j=0;j<SampleNum;j++) cin>>t[j];
BST->CreateBST(t,SampleNum);
cin>>Key;
BST->SearchBST(Key);
cout<<BST->BisSuccess<<" "<<BST->BisPos <<" "<<BST->BisCount<<endl;
}
return 0;
}
运行截图:
2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。
数据结构与算法实验报告 二叉排序树
return FALSE;
}else if (key == T->data){
*p = T;
return TRUE;
}else if (key < T->data){ // 在左子树中继续查找
return SearchBST(T->lchild, key, T, p);
}else{ // 在右子树中鸡血查找
for (i = 0; i < 10; i++) { // 通过插入操作来构建二叉排序树
InsertBST(&T, a[i]);
}
printf("中序递归遍历二叉排序树:\n");
InOrderTraverse(T);
printf("\n\n");
DeleteBST(&T, 93);
printf("删除结点 93 后的结果为:\n");
InOrderTraverse(T);
printf("\n\n");
printf("插入 91 后的结果为:\n");
InsertBST(&T, 91);
InOrderTraverse(T);
printf("\n\n");
return 0;
}
实验心得:
通过本次实验,我理解了二叉排序树的概念,掌握实现算法。同时在二叉排序树的删除操作的代码编写时,让我明白了不同情况的不同处理方式,养成了更严谨的编写代码的思维方式。
free(s);
}
return TRUE;
}
int DeleteBST(BiTree * T, int key){
数据结构课程设计--二叉排序树
成绩:__________课程设计(数据结构)院、系计算机与软件学院专业软件工程姓名学号指导教师二零一二年十二月二十五日目录1.绪论 (1)2.课程设计 (1)2.1课程设计目的 (1)2.2课程设计要求 (1)3.课程实验内容 (2)3.1普通二叉排序树的插入,删除 (2)3.2按递增顺序插入N个整数,并按同样顺序删除 (2)3.3按递增顺序插入N个整数,并按相反顺序删除 (2)3.4按随机顺序插入N个整数,并按随机顺序删除 (3)4.课程设计实验结果 (3)4.1课程实验数据 (3)4.2实验操作效率比较图 (4)二叉排序树魏麟祥南京信息工程大学计算机与软件学院,南京 210044摘要:本文主要是对二叉排序树的操作效率进行探讨,先从二叉排序树的定义来进行分析,然后分析其主要的性质。
通过对其性质的分析,让人们了解二叉排序树的运行。
从理论上分析二叉排序树的创建、删除、插入以及遍历,运用C语言算法编程实现对普通二叉排序树制定操作,通过普通二叉排序树对实例的运行时间来判断普通二叉排序树的运行效率。
关键词:二叉排序树;C语言;随机函数1.绪论通过对数据结构的不断学习,对二叉排序树有了一定的了解。
在教材中,只是从理论上说明了二叉排序树的定义及其效率,并没有用具体算法的在计算机上实现。
就此问题,本文在其理论的基础上给出了具体的算法。
利用普通二叉排序树的定义,为了更详细的描述二叉排序树的算法,文章采用C语言来编程实现。
该算法主要描述二叉排序树的建立,删除,插入以及遍历等操作。
通过分别测试3类数据来直观的表现出普通二叉排序树的运行效率。
2.课程设计2.1课程设计目的掌握了解二叉排序树插入删除的效率,通过合作写程序提高自己的设计能力和测试的能力。
在写程序的时候能了解自己的不足,提高自己解决问题的能力。
2.2课程设计要求对普通二叉排序树实现定制操作,分析这一数据结构对应的插入和删除操作效率。
要求对N个不同整数进行下列操作:(1)按递增顺序插入N个整数,并按同样顺序删除;(2)按递增顺序插入N个整数,并按相反顺序删除;(3)按随机顺序插入N个整数,并按随机顺序删除;要求N从1000到10000取值,并以数据规模N为横轴,运行时间为纵轴,画出3种不同数据结构对应的操作效率比较图。
数据结构实验报告—二叉树
数据结构实验报告—二叉树数据结构实验报告—二叉树引言二叉树是一种常用的数据结构,它由节点和边构成,每个节点最多有两个子节点。
在本次实验中,我们将对二叉树的基本结构和基本操作进行实现和测试,并深入了解它的特性和应用。
实验目的1. 掌握二叉树的基本概念和特性2. 熟练掌握二叉树的基本操作,包括创建、遍历和查找等3. 了解二叉树在实际应用中的使用场景实验内容1. 二叉树的定义和存储结构:我们将首先学习二叉树的定义,并实现二叉树的存储结构,包括节点的定义和节点指针的表示方法。
2. 二叉树的创建和初始化:我们将实现二叉树的创建和初始化操作,以便后续操作和测试使用。
3. 二叉树的遍历:我们将实现二叉树的前序、中序和后序遍历算法,并测试其正确性和效率。
4. 二叉树的查找:我们将实现二叉树的查找操作,包括查找节点和查找最大值、最小值等。
5. 二叉树的应用:我们将探讨二叉树在实际应用中的使用场景,如哈夫曼编码、二叉搜索树等。
二叉树的定义和存储结构二叉树是一种特殊的树形结构,它的每个节点最多有两个子节点。
节点被表示为一个由数据和指向其左右子节点的指针组成的结构。
二叉树可以分为三类:满二叉树、完全二叉树和非完全二叉树。
二叉树可以用链式存储结构或顺序存储结构表示。
- 链式存储结构:采用节点定义和指针表示法,通过将节点起来形成一个树状结构来表示二叉树。
- 顺序存储结构:采用数组存储节点信息,通过计算节点在数组中的位置来进行访问和操作。
二叉树的创建和初始化二叉树的创建和初始化是二叉树操作中的基础部分。
我们可以通过手动输入或读取外部文件中的数据来创建二叉树。
对于链式存储结构,我们需要自定义节点和指针,并通过节点的方式来构建二叉树。
对于顺序存储结构,我们需要定义数组和索引,通过索引计算来定位节点的位置。
一般来说,初始化一个二叉树可以使用以下步骤:1. 创建树根节点,并赋初值。
2. 创建子节点,并到父节点。
3. 重复步骤2,直到创建完整个二叉树。
二叉排序数课程设计
二叉排序数课程设计一、课程目标知识目标:1. 学生能理解二叉排序树的基本概念,掌握其结构特点及性质;2. 学生能掌握二叉排序树的插入、删除及查找操作,并理解其时间复杂度;3. 学生能运用二叉排序树解决实际问题,如排序、查找等。
技能目标:1. 学生能通过实际操作,构建并修改二叉排序树;2. 学生能运用二叉排序树进行数据排序和查找,提高解决问题的能力;3. 学生能运用所学知识,对二叉排序树进行优化,提高算法效率。
情感态度价值观目标:1. 学生通过学习二叉排序树,培养对数据结构和算法的兴趣,激发学习积极性;2. 学生在合作学习过程中,培养团队协作能力和沟通能力,增强集体荣誉感;3. 学生通过解决实际问题,体会算法在实际应用中的价值,提高对计算机科学的认识。
分析课程性质、学生特点和教学要求:本课程为数据结构与算法领域的内容,旨在让学生掌握二叉排序树的基本概念和操作。
针对初中年级学生的特点,课程设计注重实际操作和问题解决能力的培养。
教学要求注重理论与实践相结合,引导学生通过动手实践,深入理解二叉排序树的特点和应用。
通过分解课程目标为具体的学习成果,为后续教学设计和评估提供依据。
二、教学内容1. 二叉排序树基本概念:定义、性质、应用场景;2. 二叉排序树的构建:插入操作、删除操作、查找操作;3. 二叉排序树的遍历:前序遍历、中序遍历、后序遍历;4. 二叉排序树的查找:查找最小值、查找最大值、查找特定值;5. 二叉排序树的删除:删除叶子节点、删除只有一个子节点的节点、删除有两个子节点的节点;6. 二叉排序树的优化:平衡二叉排序树的概念及特点;7. 二叉排序树在实际问题中的应用:排序、查找等。
教学大纲:第一课时:二叉排序树基本概念、性质、应用场景;第二课时:二叉排序树的构建与插入操作;第三课时:二叉排序树的删除操作;第四课时:二叉排序树的查找操作;第五课时:二叉排序树的遍历;第六课时:平衡二叉排序树的概念及特点;第七课时:二叉排序树在实际问题中的应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计 - 1 - 数据结构课程设计报告
题目 : 排序二叉树的应用 一、设计任务 1、 程序在运行时,可以执行有关排序二叉树的操作:如插入一个元素、删除一个元素、查找一个元素、打印一个元素等。 2、 用递归算法遍历二叉树。
二 、设计分析 1 、 二叉树是n(n>=0)个结点的有限集合,它或为空树(n=0),或由一个根结点和两棵分别称为根的左子树和右子树的互不相交的二叉树组成。二叉树是一个递归定义。一棵深度为k且有2k-1个结点的二叉树称为满二叉树。对满二叉树的结点进行连续编号,约定编号从根结点起,自上而下,自左而右。
2 、 二叉树的存储结构 1) 顺序存储结构:二叉树可以采用顺序存贮结构,即用一维数组来存放二叉树的数据元素。它是按照满二叉树的结点层次编号层次来依次存放二叉树中的数据元素。 2)链式存储结构:设计不同的结点结构可构成不同形式的链式存储数据结构课程设计 - 2 - 结构。 在本程序中,采用顺序存储结构,对二叉树进行插人、删除、查找、遍历等操作。
3 、 二叉树的建立 已知一棵二叉树,共有n个结点,建立的方法如下: 1) 照完全二叉树的编号方法,对该二叉树进行编号。 2) 次输入一个结点的值x和该结点的编号k,动态申请一块空间来存放该结点,空间的地址为p。 3) 把p值赋给adr[k]中。 4) 如果k=1,转到5;否则,把p的值填入其父结点的指针域中。p的父结点地址为adr[k/2],若k为偶数,则做adr[k/2]->lc=p;若为奇数,则做adr[k/2]->rc=p。 5) 重复2~4,直到全部顶点数据输入完为止。
4 、 遍历二叉树,即如何按某条搜索路径寻访树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。 一棵非空二叉树是由根结点(D)、左子树(L)和右子树(R)三个基本部分组成。要遍历这三个基本部分,可以有六种可能的顺序。若限定先左后右,则只有三种情况:先序遍历(DLR)、中序遍历(LDR)、后序遍历(LRD)。 在本程序中,遍历二叉树函数的核心是以一个简单的case语句来实现数据结构课程设计 - 3 - 的。
5 、 二叉树的插入操作:这个操作首先生成一个新的结点结构,把数据存入新结点,然后搜索二叉树寻找插入结点的位置,再把新结点连接到二叉树。把这个操作定义为一个函数,其函数名为instree。
6 、 二叉树中元素的查找:在许多情况下,我们需要在一棵已知的二叉树中查找某个元素,以确定树中是否存在这个元素。这种查找与链表数据结构中查找成员的情况极类似。查找函数名字定义为membertree。
7 、 从二叉树中删除一个成员:进行成员删除操作时,首先必须用递归函数遍历这棵树,找到这个元素。当找到这个元素之后,还要考虑以下四种不同的情况:删除一个终端结点;删除只有一个左孩子的结点;删除只有一个右孩子的结点;删除带有两个孩子的结点。删除函数名字定义为deltree。
8 、 在主函数main( )中,除了初始化指针tp之外,用循环语句while(1)在屏幕上显示出主菜单: I ——Insert an element into tree D——Delete an element from the tree F——Find a member in the tree 数据结构课程设计 - 4 - P——Print the tree Q——Quit 用户可以根据自己的需要,从键盘键入不同的合法字母(例如‘I’),而进入不同的树处理函数进行处理。 不同树处理函数的选择是通过简单的switch-case语句来实现,其中包括了若错技术。如果用户从键盘输入的不是’I’,’D’,’F’,’P’,’Q’这些合法字符,则程序会先告诉用户输入出错,让用户重新输入,直到输入选择正确为止。
三 、设计思路 1 、主函数main() :由case语句组成,支持程序选择,当运行时,可以执行有关二叉树的操作:如插入一个元素、删除一个元素、查找一个元素、打印一个元素等。
2 、主要的树函数的说明部分 1)void prttree(treeptr tnode,int t);//打印树。该函数在屏幕上打印出存放在树中的元素,如果是空树,则无输出。 参数:tnode-指向根结点的指针; t-打印方式:0:前序 1:中序 2:后序(用递归算法遍历二叉树)。
2)treeptr instree(char *s,int key,treeptr tnode);//插入一个元素。数据结构课程设计 - 5 - 该函数把一个元素插入到二叉树中。 参数:s,key-接收插入数据; tnode-是指向根结点的指针。
3)treeptr membertree(char *s,treeptr tnode);//查找一个元素。该函数测定树中的指定元素,如果元素是树中的成员,则函树返回该元素,否则返回NULL指针.。 参数:s-指向要找的那个串的指针; tnode-指向树根结点的指针。
4)treeptr deltree(char *s,treeptr tnode);//删除一个元素。该函数删除一个结点。 参数:s-要删除的结点的数据域的值; tnode-指向根结点的指针。
5)treeptr findinspos(char *s,treeptr tnode);//该函数寻找一个元素要插入的位置。 数据结构课程设计
- 6 - tp!=NULL
exit
结 束
四 、流程图 1、main( ) 函 数
‘I’ ‘P’ ‘D ’ ‘F’ ‘Q’ 其 它 输 入 输 入 s s printf
tp==deltree Y N (s,tp) t==membe -tree(s,tp)
printf printf break Y t!=NULL N
输 入 printf printf 任 意 数 输 入 i
break 输 入 任 意 数 prttree(tp,i) break
输入任意数
break
输入s,key
输 入ch 开 始 数据结构课程设计
- 7 - 2、主 要 树 函 数 1) prttree( ) 函 数 开 始
tnode Y !=NULL N
t ‘0’ ‘1’ ‘2’ prttree(tnod prttree(tnode printf -e->left,t) ->left,t)
prttree(tnod printf prttree(tnod -e->left,t) -e->right,t)
prttree(tnod prttree(tnod -e->right,t) -e->right,t) printf
结 束 数据结构课程设计
- 8 - 开 始 2) instree( ) 函 数
为t1分配 空 间
Y t1==NULL N printf t1->right =NULL
printf t1->left=NULL return t1->key (tnode) =key
strcpy(t1->data,s) Y tnode==NULL N
return t2=findinspos(s,tonde) (t1)
Y (strcmp(t2-data,s))<=0 N
t2->right=t1 t2->left=t1
return(tnode) 数据结构课程设计
- 9 - 结 束 3) membertree( ) 函 数 开 始
t=tnode N t!=NULL Y
cmp=strcmp(t->data,s)
Y cmp==0 N return(t) Y cmp<0 N t=t->right t=t->left
return(NULL) 结 束 4) findinspos( ) 函 数 开 始
Y (strcmp(tnode->data,s))>=0 N
Y tnode->left==NULL N Y tnode->right==NULL N return(tnode) findinspos(s,tnode->left) return(tnode) findinspos(s,tnode->right) 数据结构课程设计
- 10 - 无孩子 结 束 5) deltree( ) 函 数 开 始
tnode==NULL Y return(NULL)
ch=strcmp(tnode->data,s) Y ch==0 N ch>0 N free(tno Y 无左孩子 N tnode->left=del tnode -de-> -tree(s,tnode->left) -right data) =deltree t1=tnode-> Y 无右孩子 N (s,tnode right ->right) t1=tno t1=tnode free(tn -de-> ->righ -ode) free(tno left -de->da -ta) t2=tnode return free ->right (NULL) (tnode-> free data) (tnode) t2->left!=NULL N
free Y return (tnode) (t1) t2=t2->left
return (t1) t2->left= tnode->left