/*

*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 - 是否二叉排序树?】相关推荐

  1. 数据结构上机实践第14周项目3 - 是否二叉排序树

    是否二叉排序树? 项目要求如下: 设计一个算法,判断给定的二叉树是否是二叉排序树. int JudgeBST()是设计的算法对应的实现. 实现源代码如下: //*Copyright (c)2017,烟 ...

  2. 第十三周项目一(4)——验证平衡二叉树相关算法

    *Copyright(c)2017,烟台大学计算机与控制工程学院 *All rights reservrd. *作者:刘文平 *完成时间:2017年11月23日 *版本号:v1.0 *问题描述:验证平 ...

  3. 第十三周项目4-数组的排序:冒泡排序

    编写函数,完成冒泡排序,要求不能改变下面的main函数. //两个函数bubble_sort和output_array的声明int main( ) {int a[20]={86,76,62,58,77 ...

  4. 第十三周项目四-立体类族共有的抽象类

    /* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年6月1日 *版 本 ...

  5. 第十三周项目三-形状类族中的纯虚函数

    /* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年6月1日 *版 本 ...

  6. 第十三周项目二-动物这样叫(3)

    /* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年5月31日 *版 本 ...

  7. 第十三周项目二-动物这样叫(2)

    /* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年5月31日 *版 本 ...

  8. 第十三周项目二-动物这样叫(1)

    /* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年5月31日 *版 本 ...

  9. 第十三周项目-交通工具类程序

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月25日*版 本 号:v1. ...

  10. 第十三周项目一-分数类中的运算符重载

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月25日*版 本 号:v1. ...

最新文章

  1. 执行前端测试的必要性
  2. 在MFC中使用AFXBEGINTHREAD的方法
  3. 杰出数据科学家的关键技能是什么?
  4. 集群(cluster)原理(转)
  5. Xsens MTi -1 姿态传感器恢复与MTI的通信的方法
  6. 听一听蚂蚁金服机器学习算法中台周俊谈共享智能技术实践:如何降低数据共享的难度?
  7. Linux CentOS7.0 (01)在Vmvare Workstation上 安装配置
  8. 开源:如何优雅的实现一个操作日志组件
  9. ajaxFileUpload plugin上传文件 chrome、Firefox中出现SyntaxE
  10. invalid signature什么意思_function是什么意思?
  11. Memcache的最佳实践方案
  12. 华锐研究:国际领先经营机构(投行)信息技术投入 | 数据发布
  13. CUDA11.4、CUDNN、Pytorch安装
  14. pyTorch 图像分类模型训练教程
  15. 在uniapp中如何使用icon图标
  16. java 绑定mac地址_如何JAVA实现使用TrueLicense在证书中绑定PC的MAC地址,防止止拷贝应用...
  17. 支付宝高可用系统架构-胡喜
  18. 【百度地图循环标记多个点,点击显示对应详情】
  19. java netty wss_netty中websocket, wss
  20. Github上更新自己Fork的代码

热门文章

  1. Cocos2d-x客户端资源加密
  2. 闪电侠 Netty 小册里的骚操作
  3. 彩色滤镜阵列CFA与Bayer滤镜
  4. 分布式处理框架MapReduce
  5. 第六章 医学图像分割
  6. 【嵌入式】STM32通讯方式
  7. 网页端小项目首页的内容
  8. springboot整合swagger方式1——com.spring4all/swagger-spring-boot-starter
  9. PS对上万种颜色收费不交变黑/ RTX4090玩原神可达13K分辨率/ 双11京东微信零钱通都崩了…今日更多新鲜事在此...
  10. hbase shell assign