/*实现二叉排序树上的查找算法。具体实现要求:
1.    用二叉链表做存储结构,输入键值序列,建立一棵二叉排序树。
2.    用广义表表示所建二叉树。
3.    按中序遍历这棵二叉排序树。
4.    在二叉排序树上插入结点。
5.    删除二叉排序树上的结点。
6.    在二叉排序树上实现查找算法。*/#include <stdio.h>
#include <stdlib.h>
typedef int InfoType;typedef int KeyType;            //假定关键字类型为整数
typedef struct node                //结点类型
{KeyType key;                //关键字项InfoType otherinfo;            //其它数据域,InfoType视应用情况而定 下面不处理它struct node *lchild,*rchild;//左右孩子指针
}BSTNode;
typedef BSTNode *BSTree;        //BSTree是二叉排序树的类型void main()
{void InsertBST(BSTree *Tptr,KeyType key);    //将关键字key插入二叉排序树中BSTree CreateBST(void);            //建立二叉排序树void ListBinTree(BSTree T);        //用广义表表示二叉树void DelBSTNode(BSTree Tptr,KeyType key);    //在二叉排序树中删除关键字keyBSTNode *SearchBST(BSTree T,KeyType key);    //在二叉排序树中查找关键字key
    BSTree T;BSTNode *p;int key;printf("请输入关键字(输入0为结束标志):\n");T=CreateBST();ListBinTree(T);printf("\n");printf("请输入欲插入关键字:");scanf("%d",&key);InsertBST(&T,key);ListBinTree(T);printf("\n");printf("请输入欲删除关键字:");scanf("%d",&key);DelBSTNode(T,key);ListBinTree(T);printf("\n");printf("请输入欲查找关键字:");scanf("%d",&key);p=SearchBST(T,key);if(p==NULL)printf("没有找到%d!\n",key);elseprintf("找到%d!\n",key);ListBinTree(p);printf("\n");
}//将关键字key插入二叉排序树中
void InsertBST(BSTree *T,KeyType key)
{BSTNode *p,*q;if((*T)==NULL){(*T)=(BSTree)malloc(sizeof(BSTNode));(*T)->key=key;(*T)->lchild=(*T)->rchild=NULL;}else{p=(*T);while(p){q=p;if(p->key>key)p=q->lchild;else if(p->key<key)p=q->rchild;else{printf("\n该二叉排序树中含有关键字为%d的结点\n",key);return;}}p=(BSTree)malloc(sizeof(BSTNode));p->key=key;p->lchild=p->rchild=NULL;if(q->key>key)q->lchild=p;elseq->rchild=p;}
}//建立二叉排序树
BSTree CreateBST(void)
{BSTree T = NULL;KeyType key;scanf("%d",&key);while(key){InsertBST(&T,key);scanf("%d",&key);}return T;
}//在二叉排序树中删除关键字key
void DelBSTNode(BSTNode *Tptr,KeyType key)
{BSTNode *f,*p=Tptr;while(p&&p->key!=key)//查找值为x的结点
    {if(p->key>key){f=p;p=p->lchild;}else{f=p;p->rchild;}}if(p==NULL) {printf("没找到");return ;}//没找到if(p->lchild==NULL)//被删结点没有左子树,直接将右子树接到其双亲上
    {if(f->lchild==p)f->lchild=p->rchild;else f->rchild=p->rchild;return ;}else//被删结点有左子树
    {BSTNode *q=p->lchild,*s=q;while(q->rchild!=NULL)//查找左子树最右下的结点(中序最后结点)
        {s=q;q=q->rchild;}if(s==p->lchild)//p左子树的根结点无右子女
        {p->key=s->key;p->lchild=s->lchild;free(s);return ;}else{p->key=q->key;s->rchild=q->lchild;free(q);//删除q结点return ;}}}//用广义表表示二叉树
void ListBinTree(BSTree T)
{//在此插入必要的语句if(T!=NULL){printf("%d",T->key);if(T->lchild!=NULL||T->rchild!=NULL){printf("(");ListBinTree(T->lchild);if(T->rchild!=NULL)printf(",");ListBinTree(T->rchild);printf(")");}}
}//在二叉排序树中查找关键字key
BSTNode *SearchBST(BSTree T,KeyType key)
{//在此插入必要的语句if(T==NULL||key==T->key)return T;if(key<T->key)return SearchBST(T->lchild,key);else return SearchBST(T->rchild,key);
}

感觉很难  做的太少了吧

转载于:https://www.cnblogs.com/loveincode/p/3741558.html

二叉排序树 算法实验相关推荐

  1. 数据结构 查找 静态查找表算法 折半查找 二叉排序树查找算法 实验报告

    实验内容: 基本内容: 算法1:采用顺序存储结构创建静态查找表,对查找表进行顺序查找和改进的顺序查找,并对其查找效率进行比较: 算法2:采用顺序存储结构创建静态查找表--有序表,对有序表进行二分查找: ...

  2. c语言三元组稀疏矩阵的转置实验报告,稀疏矩阵三元组实现矩阵转置算法实验报告.doc...

    稀疏矩阵三元组实现矩阵转置算法实验报告.doc 1实验三稀疏矩阵的三元组表示实现矩阵转置算法学院专业班学号姓名一.实习目的1掌握稀疏矩阵的三元组顺序表存储表示:2掌握稀疏矩阵三元组表示的传统转置算法的 ...

  3. 【StatLearn】统计学习中knn算法实验(2)

    接着统计学习中knn算法实验(1)的内容 Problem: Explore the data before classification using summary statistics orvisu ...

  4. c语言编写队列元素逆置,数据结构与算法实验—利用栈逆置队列元素.doc

    数据结构与算法实验-利用栈逆置队列元素 利用栈逆置队列元素实验报告 通信1204班 谢崇赟 实验名称 利用堆栈将队列中的元素逆置 实验目的 会定义顺序栈和链栈的结点类型. 掌握栈的插入和删除结点在操作 ...

  5. 广州交通大学二年级算法实验题目(第一弹)

    文章目录 写在前面 内容: 2. 棋盘覆盖 3. 找众数 4. 半数集 5. 重复元素的全排列 6. 整数因子分解 8. 线性时间选择 写在最后 写在前面 这个学期学院给我们专业开了算法课,下星期五是 ...

  6. 数据结构最短路径例题_数据结构算法实验8图的最短路径问题附源代码.doc

    浙江大学城市学院实验报告 课程名称 数据结构与算法 实验项目名称 实验八 图的最短路径问题 实验成绩 指导老师(签名 ) 日期 实验目的和要求 掌握图的最短路径概念. 理解并能实现求最短路径的DijK ...

  7. c语言des算法实验报告,C语言实现DES算法实验报告解析.doc

    C语言实现DES算法实验报告解析 xx工程大学 实验报告 (2015-2016学年第一学期) 报告题目: DES加密算法 课程名称: 密码学B 任课教员: 专 业: 学 号: 姓 名: 二O一六年一月 ...

  8. 【课题总结】OpenCV 抠图项目实战(11)算法实验平台

    Python 小白的课题报告-OpenCV 抠图项目实战(11)抠图算法实验平台 本系列是 Python 小白的课题作业<基于OpenCV 的图像分割和抠图>. 需要说明的是,本系列并不能 ...

  9. dsp实现快速傅里叶的C语言程序,DSP-快速傅立叶变换(FFT)算法实验

    <DSP-快速傅立叶变换(FFT)算法实验>由会员分享,可在线阅读,更多相关<DSP-快速傅立叶变换(FFT)算法实验(10页珍藏版)>请在人人文库网上搜索. 1.中 南 大 ...

最新文章

  1. js 查找当前元素/this
  2. Java黑皮书课后题第10章:*10.5(显示素数因子)编写一个程序,提示用户输入一个正整数,然后以降序显示它的所有最小因子
  3. java list遍历添加元素_java遍历List过程中添加和删除元素的问题
  4. 记录console的使用
  5. .第一天.net 学习理论
  6. Spring源码系列(十一)——Spring源码总结
  7. fcntl函数详解-文件锁
  8. html英文字母大小,26个英文字母大小写的规范书写
  9. 物联网关键技术:时序数据库
  10. navicat premium导入表格时出现无法打开文件
  11. ligerui 表格中设置单元格不可编辑,添加行,删除行
  12. python自动翻译导学案_变量python学案
  13. 大数据为什么需要学python?
  14. sublimelinter php,sublime text 3 在Windows下配置sublimelinter-php的路径问题
  15. 路边停车系统无线地磁车辆传感器
  16. 【工业机器人】关于工业机器人控制系统,这几方面内容你必须掌握;如何将工业机器人与数控机床融合应用?
  17. 【BIOS】debug命令清除bios密码
  18. 荔枝FM、喜马拉雅FM、蜻蜓FM竞品分析
  19. C应用 -BMP图片存储格式及生成
  20. linux 脚本编写基本命令,Linux Shell命令行及脚本编程实例详解

热门文章

  1. jq使用教程03_JQData说明书概要
  2. 不需要Excel的可视化大屏,究竟可以多炫酷?附20份模板
  3. 数据分析只能当一辈子取数机?可能你缺少这个基础思维
  4. 企业如何开展数据可视化建设
  5. Flex Java Servlet 实现简单图片编辑
  6. 返回的图片 buffer 怎么接收_面试题:Kafka 会不会丢消息?怎么处理的?
  7. markdown生成html不出效果,mdeditor: 简单markdown编辑器,同步预览html效果。不依赖任何插件,使用简单,原创,造轮子中。。。更新中。。。...
  8. async spring 默认线程池_SpringBoot中Async异步方法和定时任务介绍
  9. java实现文件下载的两种方式6_struts2实现文件下载功能
  10. 操作系统 第四章 文件管理