数据结构上机实践第14周项目3 - 是否二叉排序树
//*Copyright (c)2017,烟台大学计算机与控制工程学院*
//*All rights reservrd.*
//*文件名称 :main.cpp*
//*作者:田长航*
//*完成时间:2017年11月29日*
//*版本号:v1.0*
//*问题描述:测试函数*
//*输入描述:无*
//*程序输出:无*
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef int KeyType; //定义关键字类型
typedef char InfoType;
typedef struct node //记录类型
{KeyType key; //关键字项InfoType data; //其他数据域struct node *lchild,*rchild; //左右孩子指针
} BSTNode;
int path[MaxSize]; //全局变量,用于存放路径
void DispBST(BSTNode *b); //函数说明
int InsertBST(BSTNode *&p,KeyType k) //在以*p为根节点的BST中插入一个关键字为k的节点
{if (p==NULL) //原树为空, 新插入的记录为根节点{p=(BSTNode *)malloc(sizeof(BSTNode));p->key=k;p->lchild=p->rchild=NULL;return 1;}else if (k==p->key)return 0;else if (k<p->key)return InsertBST(p->lchild,k); //插入到*p的左子树中elsereturn InsertBST(p->rchild,k); //插入到*p的右子树中
}
BSTNode *CreatBST(KeyType A[],int n)
//由数组A中的关键字建立一棵二叉排序树
{BSTNode *bt=NULL; //初始时bt为空树int i=0;while (i<n)InsertBST(bt,A[i++]); //将A[i]插入二叉排序树T中return bt; //返回建立的二叉排序树的根指针
}void DispBST(BSTNode *bt)
//以括号表示法输出二叉排序树bt
{if (bt!=NULL){printf("%d",bt->key);if (bt->lchild!=NULL || bt->rchild!=NULL){printf("(");DispBST(bt->lchild);if (bt->rchild!=NULL) printf(",");DispBST(bt->rchild);printf(")");}}
}/*
int JudgeBST(BSTNode *bt)为判断一个树是否为排序二叉树设计的算法的实现
*/
KeyType predt=-32767; //predt为全局变量,保存当前节点中序前趋的值,初值为-∞
int JudgeBST(BSTNode *bt) //判断bt是否为BST
{int b1,b2;if (bt==NULL)return 1; //空二叉树是排序二叉树else{b1=JudgeBST(bt->lchild); //返回对左子树的判断,非排序二叉树返回0,否则返回1if (b1==0 || predt>=bt->key) //当左子树非排序二叉树,或中序前趋(全局变量)大于当前根结点时return 0; //返回“不是排序二叉树”predt=bt->key; //记录当前根为右子树的中序前趋b2=JudgeBST(bt->rchild); //对右子树进行判断return b2;}
}int main()
{BSTNode *bt;int a[]= {43,91,10,18,82,65,33,59,27,73},n=10;printf("创建排序二叉树:");bt=CreatBST(a,n);DispBST(bt);printf("\n");printf("bt%s\n",(JudgeBST(bt)?"是一棵BST":"不是一棵BST"));bt->lchild->rchild->key = 30; //搞个破坏!printf("修改后的二叉树:");DispBST(bt);printf("\n");printf("bt%s\n",(JudgeBST(bt)?"是一棵BST":"不是一棵BST"));return 0;
}
数据结构上机实践第14周项目3 - 是否二叉排序树相关推荐
- 数据结构上机实践第14周项目1(4) - 验证算法(平衡二叉树)
验证算法(平衡二叉树) 项目要求如下: (1)由整数序列{43,52,75,24,10,38,67,55,63,60}构造AVL树: (2)输出用括号法表示的AVL树: (3)查找关键字55: ...
- 数据结构上机实践第14周项目1(2) - 验证算法(分块查找)
验证算法(分块查找) 项目要求如下: 请用22,4,23,11,20,2,15,13,30,45,26,34,29,35,26,36,55,98,56, 74,61,90,80,96,127,158, ...
- 数据结构上机实践第14周项目2 - 二叉树排序树中查找的路径
二叉树排序树中查找的路径 项目要求如下: 设计一个算法,输出在二叉排序中查找时查找某个关键字经过的路径. 专为本项目设计的算法体现在函数int SearchBST(-)和void SearchRes ...
- 数据结构上机实践第14周项目1(3) - 验证算法(二叉排序树)
验证算法(二叉排序树) 项目要求如下: 认真阅读并验证二叉排序树相关算法. (1)由整数序列{43,52,75,24,10,38,67,55,63,60}构造二叉排序树: (2)输出用括号法表示的 ...
- 数据结构上机实践第14周项目1 - 验证算法(折半查找)
验证算法(折半查找) 项目要求如下: 请用有序表{12,18,24,35,47,50,62,83,90,115,134}作为测试序列,分别对查找90.47.100进行测试. 实现源代码如下: //*C ...
- 数据结构上机实践第八周项目9-广义表算法库及应用
广义表算法库及应用 为了丰富算法库,以应对各类工程的需要,本次实践将进行广义表算法库的建立以及应用. 项目要求一: 建立广义表算法库,包括: ① 头文glist.h,定义数据类型,声明函数: ② ...
- 数据结构上机实践第八周项目2- 建立链串的算法库
建立链串的算法库 一般每一种数据结构都不会局限于在连续空间内的存取,那我们的串自然也不反常,本次实践将建立链串的算法库,应用于有需求的工程当中,提高程序的容错性. 本次实践依然会用到多文件组织工程的建 ...
- 数据结构上机实践第三周项目2 - 建设“顺序表”算法库
[项目2 - 建设"顺序表"算法库] 领会"0207将算法变程序"部分建议的方法,建设自己的专业基础设施算法库.这一周,建的是顺序表的算法库. 算法库包括两 ...
- 数据结构上机实践第七周项目1 - 自建算法库——顺序环形队列
自建算法库--顺序环形队列 本次实践将建立顺序环形队列的算法库,用于之后的工程中 实现源代码如下: 1.squeue.h /* copyright (t) 2017,烟台大学计算机学院 *All ri ...
最新文章
- overflow超出显示_[CSS]text-overflow: ellipsis;什么时候可能不生效?
- 有限域f9的特征是多少_宽频域谐波的潜在威胁欠缺全面考虑,现有标准需进一步优化...
- 聊聊spring cloud的LoadBalancerAutoConfiguration
- 直击Kafka的心脏——控制器
- 使用完成端口监控文件目录的例子
- 关于压缩工具 7z(7-zip) 的选项 -si(从标准输入流读取数据)的解读
- unity3d之控制人物转向移动并播放动画
- [要记的]excel中把字母变为数字
- 渐变背景免费UI设计素材专辑,让设计显得魅力非凡
- Restful风格实现页面之间跳转PageController
- 标志位操作指令七条CLC,STC,CLD,STD,CLI,STI,CMC
- 学习PMBOK对ITTO输入输出的技术工具整理(关系)
- 手把手教你通过PS给所需证件照进行换底色处理
- .webp格式图片详解
- Windows Server 2012 R2 Standard 安全加固
- mysql出现LF怎么办,MySQL的LF_HASH
- 南电转债上市价格预测
- int main(int argc,char* argv[]) 解析
- 短视频矩阵系统源码。抖音矩阵系统源码。抖音SEO源码。
- JavaScript中的设计模式
热门文章
- bzoj 4956: [Wf2017]Secret Chamber at Mount Rushmore(最短路)
- bzoj 4443: [Scoi2015]小凸玩矩阵(二分+二分匹配)
- bzoj 1059: [ZJOI2007]矩阵游戏(二分匹配)
- 2016CCPC网选 1002:Zhu and 772002(求解矩阵秩)
- kubernetes存储系统介绍(Volume、PV、dynamic provisioning,阿里云服务器nfs创建pv,hostpath创建pv)
- 线性方程组的5种描述方式
- rabbitmq3.7.3 发布了一个新的 exchange x-random
- java中如何将string 转化成long
- Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结...
- 【Java】【编译】javac编译源代码时,若源文件使用了别的java源代码的函数,javac会自动关联。...