PTA 是否二叉搜索树 (25分)

本题要求实现函数,判断给定二叉树是否二叉搜索树。

函数接口定义:

bool IsBST ( BinTree T );

其中BinTree结构定义如下:

typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};

函数IsBST须判断给定的T是否二叉搜索树,即满足如下定义的二叉树:
定义:一个二叉搜索树是一棵二叉树,它可以为空。如果不为空,它将满足以下性质:

  • 非空左子树的所有键值小于其根结点的键值。
  • 非空右子树的所有键值大于其根结点的键值。
  • 左、右子树都是二叉搜索树。
    如果T是二叉搜索树,则函数返回true,否则返回false。

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h> typedef enum { false, true } bool;
typedef int ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
}; BinTree BuildTree(); /* 由裁判实现,细节不表 */
bool IsBST ( BinTree T ); int main()
{
BinTree T; T = BuildTree();
if ( IsBST(T) ) printf("Yes\n");
else printf("No\n"); return 0;
}
/* 你的代码将被嵌在这里 */

输入样例1:如下图

输出样例1:

Yes

输入样例2:如下图

输出样例2:

No

第一次刷:

bool IsBST ( BinTree T ){
if(!T)
return true;
if (!T->Left && !T->Right)
return true;
else if(T->Left && !T->Right)
return (T->Left->Data < T->Data && IsBST ( T->Left ));
else if(!T->Left && T->Right)
return (T->Right->Data > T->Data && IsBST ( T->Right ));
else
return (T->Right->Data > T->Data && T->Left->Data < T->Data && IsBST ( T->Right ) && IsBST ( T->Left ));
}


要注意二叉搜索树的定义中的一点,简单来说就是根结点的值一定大于左子树的最大值,小于右子树的最小值。千万不要仅仅判断根结点与左右孩子大小的关系。

这里提供一个很好的想法:二叉搜索树的中序遍历的序列是非递减的,利用这个性质我们跑一遍中序遍历即可,设置一个全局变量pre,判断序列是否单调

这里通过定义两个全局变量来实现

int pre = -9999999, flag = 1;
void InorderTraversal( BinTree BT ){
if(BT != NULL) {
InorderTraversal( BT->Left );
if (pre < BT->Data)
pre = BT->Data;
else
flag = 0;
InorderTraversal( BT->Right );
}
}
bool IsBST ( BinTree T ) {
InorderTraversal( T );
if(flag)
return true;
return false;
}

PTA 是否二叉搜索树 (25分)的更多相关文章

  1. PTA 04-树4 是否同一棵二叉搜索树 (25分)

    题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/712 5-4 是否同一棵二叉搜索树   (25分) 给定一个插入序列就可以唯一确定一棵二 ...

  2. 7-4 是否同一棵二叉搜索树 (25分) JAVA

    给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到. 例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结 ...

  3. PAT 天梯赛 是否同一棵二叉搜索树   (25分)(二叉搜索树 指针)

    给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...

  4. PTA 7-1 是否完全二叉搜索树 (30分)

    PTA 7-1 是否完全二叉搜索树 (30分) 将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果. ...

  5. PTA 7-2 二叉搜索树的结构(30 分)

    7-2 二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大 ...

  6. 天梯赛练习 L3-010 是否完全二叉搜索树 (30分) 数组建树模拟

    题目分析: 本题的要求是将n个数依次插入一个空的二叉搜索树(左大右小,且没有重复数字),最后需要输出其层次遍历以及判断是否是完全二叉搜索树,通过观察我们发现, 如果这个树是用数组建立的,那么最后输出的 ...

  7. PAT 天梯赛 是否完全二叉搜索树   (30分)(二叉搜索树 数组)

    将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果. 输入格式: 输入第一行给出一个不超过20的正整数 ...

  8. L3-010 是否完全二叉搜索树 (30分)

    题解 判断一棵树是否是完全二叉树: 取队列的头,将头的左右孩子入队,循环每次判断是否为空,如果为空节点,此时退出循环. 然后检查队列中的元素是否全部为空,如果是则说明是完全二叉树,否则不是. 代码 # ...

  9. PTA 是否同一棵二叉搜索树(25 分)

    是否同一棵二叉搜索树(25 分) 给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始 ...

随机推荐

  1. python读取文件编码转换问题

    encode(编码)   decode(解码)   encoding(编码格式) #-*- coding:utf-8 -*- import chardet #用于查看编码 with open(&quo ...

  2. windows 10玩mysql 8

    注意事项: 1)windows 10只支持两个版本: 5.7,8.0 2)安装有两种方式,zip与installer,建议用zip方式,因为installer要安装许多依赖,如vision c++等, ...

  3. 『GoLang』fmt包的使用

    目录 1. fmt 包初识 2. 格式化 verb 应用 2.1 通用 2.2 布尔值 2.3 整数 2.4 浮点数与复数 2.5 字符串和 []byte 2.6 指针 2.7 其他 flag 2.8 ...

  4. EasyExcel无法用转换器或者注解将java字段写入为excel的数值格式

    需求: 在用easyExcel导出报表时,碰到需要将数据转换为数值or货币格式的需求 过程: 1.首先采取转换器的形式 @Override public CellData convertToExcel ...

  5. K8ssandra入门-详细记录在Linux上部署K8ssandra到Kubernetes

    1 什么是K8ssandra Cassandra是一款非常优秀的开源的分布式NoSQL数据库,被许多优秀的大公司采用,具有高可用.弹性扩展.性能好等特点. 正应Cassandra的优势,我们经常需要在 ...

  6. 模仿ToDoList

    1.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  7. SQL实例_11Oracle基本操作

    前言导读 本章介绍了在正常使用Oracle数据库之前进行的常规操作 本章语句的运行需要子啊PLSQL软件中运行 本章导入导出语句需要在虚拟环境中直接运行 1 Oracle创建表空间和用户 --1 创建 ...

  8. Apache ShardingSphere 在京东白条场景的落地之旅

    京东白条使用 Apache ShardingSphere 解决了千亿数据存储和扩容的问题,为大促活动奠定了基础. 2014 年初,"京东白条"作为业内互联网信用支付产品,数据量爆发 ...

  9. 【Ubuntu】VirtualBox 您没有查看“sf_VirtualDisk”的内容所需的权限

    ​ 但是现在发现无法去访问,没有权限: ​ 即使是: crifan@crifan-Ubuntu:~$ sudo chown -R crifan /media/sf_win7_to_ubuntu/ cr ...

  10. 搭载Dubbo+Zookeeper踩了这么多坑,我终于决定写下这篇!

    大家好,我是melo,一名大二上软件工程在读生,经历了一年的摸滚,现在已经在工作室里边准备开发后台项目啦. 这篇文章我们不谈数据结构了,来谈谈入门分布式踩过的坑.感觉到了分布式这一层,由于技术更新迭代 ...