ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:32.99KB ,
资源ID:13217862      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-13217862.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构二叉排序树实验报告.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

数据结构二叉排序树实验报告.docx

1、数据结构二叉排序树实验报告实验报告课程名:数据结构(C语言版)实验名:二叉排序树: 班级: 学号: 撰写时间:2014.12.18一 实验目的与要求1. 掌握二叉排序树上进行插入和删除的操作2. 利用 C 语言实现该操作二 实验内容 对于一个线形表, 利用不断插入的方法, 建立起一株二叉排序树 从该二叉排序树中删除一个叶子节点, 一个只有一个子树的非叶子节,一个有两个子树的非叶子节点。三 实验结果与分析#include #include /二叉查找树结点描述 typedef int KeyType; typedef struct Node KeyType key; /关键字 struct No

2、de * left; /左孩子指针 struct Node * right; /右孩子指针 struct Node * parent; /指向父节点指针 Node,*PNode; /往二叉查找树中插入结点 /插入的话,可能要改变根结点的地址,所以传的是二级指针 void inseart(PNode * root,KeyType key) /初始化插入结点 PNode p=(PNode)malloc(sizeof(Node); p-key=key; p-left=p-right=p-parent=NULL; /空树时,直接作为根结点 if(*root)=NULL) *root=p; return

3、; /插入到当前结点(*root)的左孩子 if(*root)-left = NULL & (*root)-key key) p-parent=(*root); (*root)-left=p; return; /插入到当前结点(*root)的右孩子 if(*root)-right = NULL & (*root)-key parent=(*root); (*root)-right=p; return; if(*root)-key key) inseart(&(*root)-left,key); else if(*root)-key right,key); else return; /查找元素,

4、找到返回关键字的结点指针,没找到返回NULL PNode search(PNode root,KeyType key) if(root = NULL) return NULL; if(key root-key) /查找右子树 return search(root-right,key); else if(key key) /查找左子树 return search(root-left,key); else return root; /查找最小关键字,空树时返回NULL PNode searchMin(PNode root) if(root = NULL) return NULL; if(root-

5、left = NULL) return root; else /一直往左孩子找,直到没有左孩子的结点 return searchMin(root-left); /查找最大关键字,空树时返回NULL PNode searchMax(PNode root) if(root = NULL) return NULL; if(root-right = NULL) return root; else /一直往右孩子找,直到没有右孩子的结点 return searchMax(root-right); /查找某个结点的前驱 PNode searchPredecessor(PNode p) /空树 if(p=N

6、ULL) return p; /有左子树、左子树中最大的那个 if(p-left) return searchMax(p-left); /无左子树,查找某个结点的右子树遍历完了 else if(p-parent = NULL) return NULL; /向上寻找前驱 while(p) if(p-parent-right = p) break; p=p-parent; return p-parent; /查找某个结点的后继 PNode searchSuccessor(PNode p) /空树 if(p=NULL) return p; /有右子树、右子树中最小的那个 if(p-right) re

7、turn searchMin(p-right); /无右子树,查找某个结点的左子树遍历完了 else if(p-parent = NULL) return NULL; /向上寻找后继 while(p) if(p-parent-left = p) break; p=p-parent; return p-parent; /根据关键字删除某个结点,删除成功返回1,否则返回0 /如果把根结点删掉,那么要改变根结点的地址,所以传二级指针 int deleteNode(PNode* root,KeyType key) PNode q; /查找到要删除的结点 PNode p=search(*root,key

8、); KeyType temp; /暂存后继结点的值 /没查到此关键字 if(!p) return 0; /1.被删结点是叶子结点,直接删除 if(p-left = NULL & p-right = NULL) /只有一个元素,删完之后变成一颗空树 if(p-parent = NULL) free(p); (*root)=NULL; else /删除的结点是父节点的左孩子 if(p-parent-left = p) p-parent-left=NULL; else /删除的结点是父节点的右孩子 p-parent-right=NULL; free(p); /2.被删结点只有左子树 else if

9、(p-left & !(p-right) p-left-parent=p-parent; /如果删除是父结点,要改变父节点指针 if(p-parent = NULL) *root=p-left; /删除的结点是父节点的左孩子 else if(p-parent-left = p) p-parent-left=p-left; else /删除的结点是父节点的右孩子 p-parent-right=p-left; free(p); /3.被删结点只有右孩子 else if(p-right & !(p-left) p-right-parent=p-parent; /如果删除是父结点,要改变父节点指针 i

10、f(p-parent = NULL) *root=p-right; /删除的结点是父节点的左孩子 else if(p-parent-left = p) p-parent-left=p-right; else /删除的结点是父节点的右孩子 p-parent-right=p-right; free(p); /4.被删除的结点既有左孩子,又有右孩子 /该结点的后继结点肯定无左子树(参考上面查找后继结点函数) /删掉后继结点,后继结点的值代替该结点 else /找到要删除结点的后继 q=searchSuccessor(p); temp=q-key; /删除后继结点 deleteNode(root,q-

11、key); p-key=temp; return 1; /创建一棵二叉查找树 void create(PNode* root,KeyType *keyArray,int length) int i; /逐个结点插入二叉树中 for(i=0;ilength;i+) inseart(root,keyArrayi); int main(void) int i; PNode root=NULL; KeyType nodeArray11=15,6,18,3,7,17,20,2,4,13,9; create(&root,nodeArray,11); for(i=0;ikey); printf(%dn,searchSuccessor(root)-key); printf(%dn,searchMin(root)-key); printf(%dn,searchMax(root)-key); printf(%dn,search(root,13)-key); return 0; 图1:二叉树排序实验结果

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2