第十三周 【项目3 - 是否二叉排序树?】
/*
*Copyright (c)2017,烟台大学计算机与控制工程学院
*All rights reservrd.
*作者:赵楷文
*完成时间:2017年11月26日
*版本号: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;
}
程序测试:
第十三周 【项目3 - 是否二叉排序树?】相关推荐
- 数据结构上机实践第14周项目3 - 是否二叉排序树
是否二叉排序树? 项目要求如下: 设计一个算法,判断给定的二叉树是否是二叉排序树. int JudgeBST()是设计的算法对应的实现. 实现源代码如下: //*Copyright (c)2017,烟 ...
- 第十三周项目一(4)——验证平衡二叉树相关算法
*Copyright(c)2017,烟台大学计算机与控制工程学院 *All rights reservrd. *作者:刘文平 *完成时间:2017年11月23日 *版本号:v1.0 *问题描述:验证平 ...
- 第十三周项目4-数组的排序:冒泡排序
编写函数,完成冒泡排序,要求不能改变下面的main函数. //两个函数bubble_sort和output_array的声明int main( ) {int a[20]={86,76,62,58,77 ...
- 第十三周项目四-立体类族共有的抽象类
/* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年6月1日 *版 本 ...
- 第十三周项目三-形状类族中的纯虚函数
/* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年6月1日 *版 本 ...
- 第十三周项目二-动物这样叫(3)
/* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年5月31日 *版 本 ...
- 第十三周项目二-动物这样叫(2)
/* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年5月31日 *版 本 ...
- 第十三周项目二-动物这样叫(1)
/* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年5月31日 *版 本 ...
- 第十三周项目-交通工具类程序
/**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月25日*版 本 号:v1. ...
- 第十三周项目一-分数类中的运算符重载
/**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月25日*版 本 号:v1. ...
最新文章
- 执行前端测试的必要性
- 在MFC中使用AFXBEGINTHREAD的方法
- 杰出数据科学家的关键技能是什么?
- 集群(cluster)原理(转)
- Xsens MTi -1 姿态传感器恢复与MTI的通信的方法
- 听一听蚂蚁金服机器学习算法中台周俊谈共享智能技术实践:如何降低数据共享的难度?
- Linux CentOS7.0 (01)在Vmvare Workstation上 安装配置
- 开源:如何优雅的实现一个操作日志组件
- ajaxFileUpload plugin上传文件 chrome、Firefox中出现SyntaxE
- invalid signature什么意思_function是什么意思?
- Memcache的最佳实践方案
- 华锐研究:国际领先经营机构(投行)信息技术投入 | 数据发布
- CUDA11.4、CUDNN、Pytorch安装
- pyTorch 图像分类模型训练教程
- 在uniapp中如何使用icon图标
- java 绑定mac地址_如何JAVA实现使用TrueLicense在证书中绑定PC的MAC地址,防止止拷贝应用...
- 支付宝高可用系统架构-胡喜
- 【百度地图循环标记多个点,点击显示对应详情】
- java netty wss_netty中websocket, wss
- Github上更新自己Fork的代码