家谱地设计与实现(二叉树)

合集下载

二叉树的常用算法设计和实现

二叉树的常用算法设计和实现

二叉树的常用算法设计和实现一、引言二叉树是一种重要的数据结构,广泛应用于计算机科学中。

掌握二叉树的常用算法设计和实现对于理解和应用二叉树具有重要意义。

本文档将介绍二叉树的常用算法设计和实现,包括二叉树的遍历、查找、插入和删除等操作。

二、算法设计1. 遍历算法:二叉树的遍历是二叉树操作的核心,常用的遍历算法包括先序遍历、中序遍历和后序遍历。

每种遍历算法都有其特定的应用场景和优缺点。

2. 查找算法:在二叉树中查找特定元素是常见的操作。

常用的查找算法有二分查找和线性查找。

二分查找适用于有序的二叉树,而线性查找适用于任意顺序的二叉树。

3. 插入算法:在二叉树中插入新元素也是常见的操作。

插入操作需要考虑插入位置的选择,以保持二叉树的特性。

4. 删除算法:在二叉树中删除元素也是一个常见的操作。

删除操作需要考虑删除条件和影响,以保持二叉树的特性。

三、实现方法1. 先序遍历:使用递归实现先序遍历,可以通过访问节点、更新节点计数器和递归调用下一个节点来实现。

2. 中序遍历:使用递归实现中序遍历,可以通过访问节点、递归调用左子树和中继判断右子树是否需要访问来实现。

3. 后序遍历:使用迭代或递归实现后序遍历,可以通过访问节点、迭代处理左子树和右子树或递归调用左子树和更新节点计数器来实现。

4. 二分查找:在有序的二叉搜索树中实现二分查找,可以通过维护中间节点和边界条件来实现。

5. 线性查找:在任意顺序的二叉树中实现线性查找,可以通过顺序遍历所有节点来实现。

6. 插入和删除:针对具体应用场景和删除条件,选择适当的插入位置并维护节点的插入和删除操作。

在有序的二叉搜索树中实现插入和删除操作相对简单,而在其他类型的二叉树中则需要考虑平衡和维护二叉搜索树的特性。

四、代码示例以下是一个简单的Python代码示例,展示了如何实现一个简单的二叉搜索树以及常用的二叉树操作(包括遍历、查找、插入和删除)。

```pythonclass Node:def __init__(self, data):self.data = dataself.left = Noneself.right = Noneclass BinarySearchTree:def __init__(self):self.root = Nonedef insert(self, data):if not self.root:self.root = Node(data)else:self._insert(data, self.root)def _insert(self, data, node):if data < node.data:if node.left:self._insert(data, node.left)else:node.left = Node(data)elif data > node.data:if node.right:self._insert(data, node.right)else:node.right = Node(data)else:print("Value already in tree!") # Value already in tree!def search(self, data):return self._search(data, self.root)def _search(self, data, node):if data == node.data:return Trueelif (not node.left and data < node.data) or (notnode.right and data > node.data):return Falseelse:return self._search(data, node.left) orself._search(data, node.right)def inorder_traversal(self): # inorder traversal algorithm implementationif self.root: # If the tree is not empty, traverse it in-order.self._inorder_traversal(self.root) # Recursive function call for in-order traversal.print() # Print a new line after traversal to clear the output area for the next operation.def _inorder_traversal(self, node): # Helper function for in-order traversal algorithm implementation. Traverse the left subtreefirst and then traverse the right subtree for a given node (start with root). This method handles recursive calls for traversal operations efficiently while keeping track of nodes already visited and。

C语言二叉树家谱管理系统

C语言二叉树家谱管理系统

摘要本文设计了一个对数据输入,输出,储存,查找的多功能软件,本文需要保存家族的基本信息,包括姓名及它们的关系,但是由于家族信息很巨大而且关系很复杂所以采用二叉树来表示它们的关系。

并且具有保存文件的功能,以便下次直接使用先前存入的信息。

家谱的功能是查询家族每个人的信息,并且输出它们的信息,还要具有查询输出功能。

本文采用二叉树来存取家族的基本信息,头结点作为父亲节点,他的左孩子为他的妻子,妻子结点的右孩子为他的孩子,依次存储每个家庭的信息。

可以查找每个父亲的孩子和每个人的所有祖先。

关键词:二叉树家谱结点目录1 系统功能概述 (1)1.1 系统功能 (1)图2 成员二叉树功能模块图 (4)1.2 总体功能模块 (4)2 系统各功能模块的详细设计 (5)2.1功能选择 (5)2.2信息输入 (7)2.3信息输出 (7)2.4信息存盘 (7)2.5信息清盘 (8)2.6信息查询 (9)2.7源程序 (11)3设计结果与分析 (22)3.1菜单函数功能测试 (22)4.2输入功能函数测试 (23)3.3输出功能函数测试 (23)3.4清盘功能函数测试 (23)3.5存盘功能函数测试 (24)3.6查询功能函数测试 (24)总结 (26)参考文献 (27)1 系统功能概述1.1 系统功能实现的法是先定义一个二叉树,该二叉树上的每个结点由三个元素组成:姓名、指向它左孩子的指针、以及指向它右孩子的指针构成。

该家谱管理系统将信息用文件的法进行存储管理,再从文件中将成员信息以递归的法创建二叉树。

该输入成员信息的法是将父亲结点存上父亲的信息,然后父亲结点的左孩子存上母亲的信息,母亲结点的右孩子存上孩子的信息。

(1)定义结构体结构体为表示一个对象的不同属性提供了连贯一致的法,结构体类型的说明从关键词struct开始,成员可以由各种数据类型混合构成,成员甚至还可以是数组或者其他类型的结构,但是,结构体中不能包含自身定义类型的成员。

二叉树的现实中典型例子

二叉树的现实中典型例子

二叉树的现实中典型例子二叉树是一种常用的数据结构,它具有广泛的应用。

下面列举了十个二叉树在现实中的典型例子。

一、文件系统文件系统是计算机中常见的二叉树应用之一。

文件系统中的目录和文件可以组织成一棵树,每个目录称为一个节点,而文件则是叶子节点。

通过树的结构,我们可以方便地对文件和目录进行管理和查找。

二、组织架构企业或组织的组织架构通常可以用二叉树来表示。

每个部门可以看作是一个节点,而员工则是叶子节点。

通过组织架构树,我们可以清晰地了解到企业或组织内部的管理层级关系。

三、家谱家谱是一个家族的血缘关系的记录,一般可以用二叉树来表示。

每个人可以看作是一个节点,而父子关系则是节点之间的连接。

通过家谱树,我们可以追溯家族的历史和血缘关系。

四、编译器编译器是将高级语言转换为机器语言的程序。

在编译过程中,编译器通常会使用语法分析树来表示源代码的结构。

语法分析树是一种特殊的二叉树,它将源代码表示为一个树状结构,方便进行语法分析和编译优化。

五、数据库索引数据库中的索引是一种用于提高数据查询效率的数据结构。

常见的索引结构包括B树和B+树,它们都是二叉树的变种。

通过索引树,数据库可以快速地定位到需要查询的数据,提高数据库的检索性能。

六、表达式求值在数学计算中,表达式求值是一项重要的任务。

通过使用二叉树,我们可以方便地表示和计算表达式。

二叉树的叶子节点可以是操作数,而内部节点可以是运算符。

通过遍历二叉树,我们可以按照正确的顺序对表达式进行求值。

七、电路设计在电路设计中,二叉树也有广泛的应用。

例如,我们可以使用二叉树来表示逻辑电路的结构,每个门电路可以看作是一个节点,而连接线则是节点之间的连接。

通过电路设计树,我们可以方便地进行电路的布线和优化。

八、图像处理图像处理是一项常见的计算机技术,而二叉树在图像处理中也有重要的应用。

例如,我们可以使用二叉树来表示图像的像素信息,每个像素可以看作是一个节点,而像素之间的关系则是节点之间的连接。

数据结构家谱管理系统(二叉链表)

数据结构家谱管理系统(二叉链表)

char life; //是否健在 };
3、 二叉树结点结构体 struct Node { Information data; //个人信息 Node* child; //第一个孩子 Node* brother; //兄弟 };
4、 家谱类(二叉树结构、左孩子,右兄弟) class FamilyTree { private:
2、 更新模块 (1) 创建家谱、增加成员、删除成员、成员改名 (2) 主要函数: Node* Creat( ); //构造函数调用 void AddNewPeople(Node *root,string FatherName,string NAme); // 增加新的家族成员 int DeletePeople(Node *root,string FatherName,string Deletepeople); //删除家族成员
要求: 用于记录某家族历代家族成员的情况与关系。现编制一个家谱资料管理 系统,实现对一个家族所有的资料进行收集整理。支持对家谱的增加, 删除,更新,统计等。
软件环境:
Microsoft Visual Studio 2010 流程设计:
开始 Main 函数 Menu 函数
FamilyTree函数 Getroot函数
目的和要求: 目的: 1、 能根据具体问题的具体情况,结合数据结构课程中的基本理论和基本算
法,分析并正确确定数据的逻辑结构,合理地选择相应的存储结构,并 能设计出解决问题的有效算法。 2、 提高程序设计和调试能力。通过上机学习,验证自己设计的算法的正确 性。学会有效利用基本调试方法。 3、 初步掌握软件开发过程中问题分析、系统设计、程序编码、测试等基本 方法和技能。 4、 培养根据选题需要选择学习书籍,查阅文献资料的自学能力。

二叉树家谱

二叉树家谱

《数据结构》课程实训报告题目:家谱树完成人:专业班级:学号:指导教师:年月日1.题目与要求1.1问题提出本人计划编写一个家谱管理系统,主要用来管理家族成员的基本信息。

1.2本系统涉及的知识点结构体,数组,循环,函数,分支,指针1.3功能要求1、确定整个程序的功能模块。

实现程序的主界面,要对主界面的功能选择输入进行容错处理。

2、实现单个结点信息的录入。

3、对录入日期信息进行合法性检验。

4、采用改变字体颜色的方式突出显示主界面的功能项。

5、计算从出生日期到死亡日期的实际天数6、若家谱树为空,则新建家谱树。

实现成员节点的添加。

基本功能中可以强制要求所有成员不同名,即不考虑同名情况(符合小家族的实际情况)。

7、添加成员节点时,可以选择将新添加的节点作为整个家谱的上一代祖先,或者将新添加的节点作为某个现有成员的孩子。

8、作为某个现有成员的孩子,根据给出的父节点的姓名将该结点添加到相应位置,注意,针对某一父节点,添加第一个孩子和其它孩子的区别。

9、要求在孩子兄弟二叉树中按各个孩子的年龄进行排序。

10、将家谱树保存到二进制文件。

注意,不能保存空白节点。

11、从文件读入家谱信息,重建孩子兄弟二叉树形式的家谱。

12.从文件中读出所有节点信息到一个数组中,然后按一年中生日的先后进行快速排序。

13、按姓名查询家谱成员并显示该成员的各项信息。

14、给出某一成员的姓名,删除该成员和该成员的所有子孙。

15、成员信息的修改。

信息修改时要给出选择界面让用户选择需要修改的信息项。

基本功能中可以限定不容许修改父亲姓名和本人姓名。

对日期信息进行修改时要进行检验。

16、实现层次递进的方式显示整个家谱,显示结果应该体现家谱树的结构。

17、按各种关键字进行查询,要求给出关键字选择界面,并显示符合查询条件的节点信息。

18、信息统计基本要求包括:平均身高,平均寿命,男女成员各多少,平均家庭人口数目(假定每个成员构成一个家庭,该家庭的家庭成员是指成员本人和他的孩子,即家庭人口数=孩子数+1)。

数据结构_家谱管理系统

数据结构_家谱管理系统

数据结构_家谱管理系统【数据结构_家谱管理系统】一、引言家谱是记录家族成员关系的重要文献,传统的家谱管理方式已经无法满足现代社会的需求。

为了更好地管理家族信息,提高家族成员之间的联系和交流,我们设计并开发了一款家谱管理系统。

本文将详细介绍该系统的设计和实现。

二、系统概述家谱管理系统是一个基于数据结构的软件应用,旨在帮助用户管理家族成员的信息,包括姓名、性别、出生日期、配偶、子女等。

系统提供了多种功能,包括添加、删除、修改、查询、统计等操作,方便用户对家谱信息进行维护和管理。

三、系统设计1. 数据结构选择在家谱管理系统中,我们选择了树这种数据结构来表示家族关系。

每个节点代表一个家庭成员,节点之间通过指针连接,形成家族的层级结构。

2. 数据模型设计家族成员的信息可以通过一个结构体来表示,包括姓名、性别、出生日期等字段。

每个节点除了包含成员信息外,还包含指向配偶的指针和指向子女的指针。

3. 系统功能设计家谱管理系统提供了以下功能:(1) 添加成员:用户可以输入成员信息,系统根据用户输入创建一个新的节点,并将其插入到适当的位置。

(2) 删除成员:用户可以指定要删除的成员,系统会删除该成员及其所有子孙节点。

(3) 修改成员信息:用户可以选择要修改的成员,然后输入新的信息进行更新。

(4) 查询成员信息:用户可以通过姓名、出生日期等条件查询成员信息。

(5) 统计家族人数:系统可以统计家族的总人数、男性人数、女性人数等信息。

四、系统实现1. 数据结构实现我们使用C语言来实现家谱管理系统。

通过定义一个节点结构体,使用指针来连接各个节点,实现家族关系的表示和管理。

2. 功能实现(1) 添加成员:根据用户输入的信息,创建一个新节点,并将其插入到适当的位置。

插入操作需要遍历树来找到合适的位置。

(2) 删除成员:根据用户指定的成员,删除该节点及其所有子孙节点。

删除操作需要递归地遍历树。

(3) 修改成员信息:根据用户选择的成员,更新其信息。

数据结构(二叉树)家谱管理系统教学内容

数据结构(二叉树)家谱管理系统教学内容

数据结构(二叉树)家谱管理系统数学与计算机学院课程设计说明书课程名称: 数据结构与算法课程设计课程代码:题目: 二叉树生成家谱年级/专业/班:学生姓名:学号:开始时间: 2015 年 12 月 09 日完成时间: 2015 年 12 月 29 日课程设计成绩:指导教师签名:年月日目录(小三黑体,居中)1 需求分析 (6)1.1任务与分析 (6)1.2测试数据 (6)2 概要设计 (7)2.1 ADT描述 (7)2.2程序模块结构 (8)2.3各功能模块 (9)3 详细设计 (11)3.1结构体定义 (11)3.2 初始化 (12)3.3 插入操作 (14)3.4 查询操作 (17)4 调试分析 (19)5 用户使用说明 (20)6 测试结果 (20)结论 (25)附录 (26)参考文献 (27)摘要随着计算机科学技术、计算机产业的迅速发展,计算机的应用普及也在以惊人的速度发展,计算机应用已经深入到人类社会的各个领域。

计算机的应用早已不限于科学计算,而更多地应用在信息处理方面。

计算机可以存储的数据对象不再是纯粹的数值,而扩展到了字符、声音、图像、表格等各种各样的信息。

对于信息的处理也不再是单纯的计算,而是一些如信息存储、信息检索等非数值的计算。

那么,现实世界的各种数据信息怎样才能够存储到计算机的内存之中,对存入计算机的数据信息怎样进行科学处理,这涉及计算机科学的信息表示和算法设计问题。

为解决现实世界中某个复杂问题,总是希望设计一个高效适用的程序。

这就需要解决怎样合理地组织数据、建立合适的数据结构,怎样设计适用的算法,以提高程序执行的时间效率和空间效率。

“数据结构”就是在此背景下逐步形成、发展起来的。

在各种高级语言程序设计的基本训练中,解决某一实际问题的步骤一般是:分析实际问题;确定数学模型;编写程序;反复调试程序直至得到正确结果。

所谓数学模型一般指具体的数学公式、方程式等,如牛顿迭代法解方程,各种级数的计算等。

3.1-3.3树及二叉树

3.1-3.3树及二叉树
b
c
称为空树;如果n > 0,则
有一个特定的称之为根
e
g
(root)的结点,它只有直接后
继,但没有直接前驱;
除根以外的其它结点划分为m (m 0)个互不相交 的有限集合T0, T1, …, Tm-1,每个集合又是一棵树, 并且称之为根的子树(SubTree)。 每棵子树的根结点有且仅有一个直接前驱,但可以 有0个或多个直接后继。
3.二叉树的性质
性质1 若二叉树的层次从1开始, 则在二叉树的
第 i 层最多有 2i-1个结点。(i 1)
证明:i = 1 时,有2i-1 = 20 =1,成立
假定 :i = k 时性质成立;即有2k-1个结点.
当 i = k+1 时,第k+1的结点至多是第k层结点的 两倍,即总的结点个数至多为2×2k-1 = 2(k+1)-1
3.2
1.二叉树的定义
二叉树
一棵二叉树是结点的一个有限集合。 •该集合或者为空,或者是由一个根结点加上两棵 分别称为左子树和右子树的、互不相交的二叉树 组成。 A
B
D G E H
C
F
二叉树
(1) 二叉树的特点:
度小于等于2
有序树
(2) 二叉树的五种基本形态
左子树 (a) (b) (c)
右子树 (d)
A
二. 若干术语
B C D
(1)结点:由数据元素 和构造数据元素之间关 系的指针组成. (2)结点的度:结点所 拥有的子树的个数。
E
F
G
H
I
(3)叶子结点:度为0的结点。 (4)分枝结点:度不为0的结点。 (5)树的度:树中各结点度的最大值称为该树的度。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

家谱的设计与实现(树,查找)家谱的设计主要是实现对家庭成员信息的建立、查找、插入、修改、删除等功能。

可。

基本功能如下:(1)家谱中每个成员的信息包括:姓名、性别。

(2)家谱祖先数据的录入(树的根结点)。

(3)家庭成员的添加:即添加某人的儿女(包括姓名和性别),儿女的数目由控制台端给出,然后输入相应的儿女姓名和性别(此处所有儿女的姓名不能重名)。

(4)家庭成员的修改:可以修改某一成员的姓名。

(5)家庭成员的查询:查询某一成员在家族中的辈分(第几代),并能查询此成员的所有子女及这一辈的所有成员。

(6)家庭成员的删除:删除此成员时,若其有后代,将删除其所有后代成员。

#include <stdio.h>#include <malloc.h>#include <string>#include <stdlib.h>#define MAX 10typedef struct node{ //定义data存储结构char name[MAX]; //姓名char sex; //性别int generation;//代目typedef struct ft{ //创建结构体struct node l; //家谱中直系家属struct ft *brother;//用来指向兄弟struct ft *child;//用来指向孩子}ft;ft *root; //root是结构体ft的指针ft *search(ft *p,char ch[]) // 搜索指针函数{ft *q;if(p==NULL)return NULL;//没有家谱,头指针下为空if(strcmpi(p->,ch)==0)return p;//家谱不为空,头指针下有这个人if(p->brother){q=search(p->brother,ch);//在兄弟中找if(q)return q;//找到if(p->child){q=search(p->child,ch);//在孩子中找if(q!=NULL)return q;}return NULL;//没有找到}ft *parent(ft *p,ft *q,int *flag) //通过parent函数得到双亲结点。

用flag标志,-1为左孩子,1为右孩子{if(p==NULL)return NULL;//没有家谱,头指针下为空if(p->child==NULL){flag=0;return NULL;}else{if(p->brother==q){*flag=1;return p;}else{if(p->child==q){*flag=-1;return p;}else{if(p->brother!=NULL){parent(p->brother,q,*&flag);}if(p->child!=NULL){parent(p->child,q,*&flag);}}}}}int generation(ft *p,char ch[]) // 获得搜索到的成员的代目的返回值{ft *q;if(p==NULL) return NULL;if(strcmpi(p->,ch)==0) return p->l.generation;//家谱不为空,头指针下有这个人if(p->brother){q=search(p->brother,ch);//在兄弟中找if(q) return q->l.generation;//找到}if(p->child){q=search(p->child,ch);//在孩子中找if(q!=NULL) return q->l.generation;}return NULL;}void saves(ft *p,char b[],char c,int d)//建立家谱孩子结点创建结点并对l赋值保存{for(int i=0;i<MAX;i++)p->[i]=b[i];p->l.sex=c;p->l.generation=d;}void disp(ft *n) //搜索到数据的输出{ft *t=NULL;printf("此人姓名:%s 性别%c 为第%d代\n",n->,n->l.sex,n->l.generation);printf("\n");printf("此人的子女:"); //子女输出if(n->child==NULL){printf("此人无子女!");}else{if(n->child->brother==NULL){printf("姓名:%s 性别:%c\t",n->child->,n->child->l.sex);} else{printf("姓名:%s 性别:%c\t",n->child->,n->child->l.sex);t=n->child->brother;while(t!=NULL){printf("姓名:%s 性别:%c\t",t->,t->l.sex);t=t->brother;}}}printf("\n");printf("\n");printf("此人的同辈成员:"); //同辈输出if(n->brother==NULL){printf("此人无同辈成员!");}else{if(n->brother->brother==NULL){printf("姓名:%s 性别:%c\t",n->brother->,n->brother->l.sex);}else{printf("姓名:%s 性别:%c\t",n->brother->,n->brother->l.sex);t=n->brother->brother;while(t!=NULL){printf("姓名:%s 性别:%c\t",t->,t->l.sex);t=t->brother;}}}printf("\n");}void InitTree() //初始化{char b[MAX],c;int a;printf(" 请输入始祖的姓名性别:");free(root); //释放root (ft)空间root=(ft *)malloc(sizeof(ft)); // 创建一个ft结构体大小的空间然后强制转换为ft *类型的指针然后赋值给root // 这时root指向一个struct dictree结构体大小的新空间scanf("%s %c",&b,&c);a=1;//输入姓名,性别root->child=NULL; //清空左右孩子root->brother=NULL;saves(root,b,c,a);//存入结构printf("家谱重构成功!\n");}void Manu(){printf(" *********************************************\n");printf(" ***** 请选择对家谱的操作: *****\n");printf(" ***** 0.退出*****\n");printf(" ***** 1.添加*****\n");printf(" ***** 2.查找*****\n");printf(" ***** 3.修改*****\n");printf(" ***** 4.删除*****\n");printf(" ***** 5.重构*****\n");printf(" *********************************************\n"); }void Add() //添加{ft *n,*m,*t=NULL;char b[MAX],c,d[MAX];int i;printf("请输入要添加子女的上一辈的姓名:\n");//判断是否有重名scanf("%s",&d);n=search(root,d);int a=generation(root,d);while(n==NULL){printf("此人不在家谱内,请重新输入姓名:\n");scanf("%s",&d);n=search(root,d);}//孩子信息添加if(n->child==NULL){printf("孩子姓名与性别输入:\n");scanf("%s %c",&b,&c);a++;m=search(root,b);if(m!=NULL){printf("出现重名,添加失败!\n");}else{n->child=(ft *)malloc(sizeof(ft));n->child->brother=NULL;n->child->child=NULL;saves(n->child,b,c,a);printf("添加成功!\n");}}else{n=n->child;while(n->brother!=NULL)n=n->brother;printf("孩子姓名与性别输入:\n");scanf("%s %c",&b,&c);a++;m=search(root,b);if(m!=NULL) printf("出现重名,添加失败!\n");else{t=(ft *)malloc(sizeof(ft));saves(t,b,c,a);t->brother=NULL;t->child=NULL;n->brother=t;printf("添加成功!\n");}}}void Search() //查询{ft *n;char d[MAX];printf("输入姓名,查找相关信息:\n");scanf("%s",&d);n=search(root,d);while(n==NULL){printf("此人不存在,请再次输入:\n");scanf("%s",&d);n=search(root,d);}disp(n);}void Change() //修改{char a[MAX],r[MAX],c;ft *n;printf("请输入要修改人的姓名:");scanf("%s",&a);n=search(root,a);while(n==NULL){printf("此人不存在,请重新输入姓名:\n");scanf("%s",&a);n=search(root,a);}printf("此人存在,请输入新信息:");scanf("%s %c",&r,&c);for(int i=0;i<MAX;i++)n->[i]=r[i];n->l.sex=c;printf("修改成功!\n");void Del() //删除{ft *n,*m;int flag;char d[MAX],a[MAX];printf("请输入要删除人的姓名:");scanf("%s",a);n=search(root,a);while(n==NULL){printf("此人不存在,请重新输入姓名:\n");scanf("%s",&a);n=search(root,a);}printf("\n");printf("此人已找到!\n");printf("\n");m=parent(root,n,&flag);if(flag>0){ m->brother=n->brother;printf("删除成功!\n");} else if(flag<0){ m->child=n->brother; printf("删除成功!\n");} }int main(){InitTree();for(;;){system("pause");system("cls");Manu();int choice;scanf("%d",&choice);switch(choice){case 0:exit(0); break;//退出case 1:Add(); break;//添加case 2:Search(); break;//查找case 3:Change(); break;//修改case 4:Del(); break;//删除case 5:InitTree(); break;//初始化}}return 0;}。

相关文档
最新文档