是否二叉排序树?
项目要求如下:
设计一个算法,判断给定的二叉树是否是二叉排序树。
int JudgeBST()是设计的算法对应的实现。
实现源代码如下:
//*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 - 是否二叉排序树相关推荐

  1. 数据结构上机实践第14周项目1(4) - 验证算法(平衡二叉树)

    验证算法(平衡二叉树) 项目要求如下: (1)由整数序列{43,52,75,24,10,38,67,55,63,60}构造AVL树:  (2)输出用括号法表示的AVL树:  (3)查找关键字55:  ...

  2. 数据结构上机实践第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, ...

  3. 数据结构上机实践第14周项目2 - 二叉树排序树中查找的路径

    二叉树排序树中查找的路径 项目要求如下: 设计一个算法,输出在二叉排序中查找时查找某个关键字经过的路径.  专为本项目设计的算法体现在函数int SearchBST(-)和void SearchRes ...

  4. 数据结构上机实践第14周项目1(3) - 验证算法(二叉排序树)

    验证算法(二叉排序树) 项目要求如下: 认真阅读并验证二叉排序树相关算法.  (1)由整数序列{43,52,75,24,10,38,67,55,63,60}构造二叉排序树:  (2)输出用括号法表示的 ...

  5. 数据结构上机实践第14周项目1 - 验证算法(折半查找)

    验证算法(折半查找) 项目要求如下: 请用有序表{12,18,24,35,47,50,62,83,90,115,134}作为测试序列,分别对查找90.47.100进行测试. 实现源代码如下: //*C ...

  6. 数据结构上机实践第八周项目9-广义表算法库及应用

    广义表算法库及应用 为了丰富算法库,以应对各类工程的需要,本次实践将进行广义表算法库的建立以及应用. 项目要求一: 建立广义表算法库,包括:  ① 头文glist.h,定义数据类型,声明函数:  ② ...

  7. 数据结构上机实践第八周项目2- 建立链串的算法库

    建立链串的算法库 一般每一种数据结构都不会局限于在连续空间内的存取,那我们的串自然也不反常,本次实践将建立链串的算法库,应用于有需求的工程当中,提高程序的容错性. 本次实践依然会用到多文件组织工程的建 ...

  8. 数据结构上机实践第三周项目2 - 建设“顺序表”算法库

    [项目2 - 建设"顺序表"算法库]  领会"0207将算法变程序"部分建议的方法,建设自己的专业基础设施算法库.这一周,建的是顺序表的算法库.  算法库包括两 ...

  9. 数据结构上机实践第七周项目1 - 自建算法库——顺序环形队列

    自建算法库--顺序环形队列 本次实践将建立顺序环形队列的算法库,用于之后的工程中 实现源代码如下: 1.squeue.h /* copyright (t) 2017,烟台大学计算机学院 *All ri ...

最新文章

  1. overflow超出显示_[CSS]text-overflow: ellipsis;什么时候可能不生效?
  2. 有限域f9的特征是多少_宽频域谐波的潜在威胁欠缺全面考虑,现有标准需进一步优化...
  3. 聊聊spring cloud的LoadBalancerAutoConfiguration
  4. 直击Kafka的心脏——控制器
  5. 使用完成端口监控文件目录的例子
  6. 关于压缩工具 7z(7-zip) 的选项 -si(从标准输入流读取数据)的解读
  7. unity3d之控制人物转向移动并播放动画
  8. [要记的]excel中把字母变为数字
  9. 渐变背景免费UI设计素材专辑,让设计显得魅力非凡
  10. Restful风格实现页面之间跳转PageController
  11. 标志位操作指令七条CLC,STC,CLD,STD,CLI,STI,CMC
  12. 学习PMBOK对ITTO输入输出的技术工具整理(关系)
  13. 手把手教你通过PS给所需证件照进行换底色处理
  14. .webp格式图片详解
  15. Windows Server 2012 R2 Standard 安全加固
  16. mysql出现LF怎么办,MySQL的LF_HASH
  17. 南电转债上市价格预测
  18. int main(int argc,char* argv[]) 解析
  19. 短视频矩阵系统源码。抖音矩阵系统源码。抖音SEO源码。
  20. JavaScript中的设计模式

热门文章

  1. bzoj 4956: [Wf2017]Secret Chamber at Mount Rushmore(最短路)
  2. bzoj 4443: [Scoi2015]小凸玩矩阵(二分+二分匹配)
  3. bzoj 1059: [ZJOI2007]矩阵游戏(二分匹配)
  4. 2016CCPC网选 1002:Zhu and 772002(求解矩阵秩)
  5. kubernetes存储系统介绍(Volume、PV、dynamic provisioning,阿里云服务器nfs创建pv,hostpath创建pv)
  6. 线性方程组的5种描述方式
  7. rabbitmq3.7.3 发布了一个新的 exchange x-random
  8. java中如何将string 转化成long
  9. 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 大总结...
  10. 【Java】【编译】javac编译源代码时,若源文件使用了别的java源代码的函数,javac会自动关联。...