zoukankan      html  css  js  c++  java
  • 习题4.3 是否二叉搜索树 (25 分) 浙大版《数据结构(第2版)》题目集

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

    函数接口定义:

    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
    ");
        else printf("No
    ");
    
        return 0;
    }
    /* 你的代码将被嵌在这里 */
    

    输入样例1:如下图

    输出样例1:

    Yes
    

    输入样例2:如下图

    输出样例2:

    No

    中序遍历,判断结点是否比左子树中的最大值还大,如果是则满足,否则不满足。空树特殊情况。
    代码:
    bool IsBST ( BinTree T ) {
        if(T == NULL) return true;
        if(T -> Left && !IsBST (T -> Left)) return false;
        BinTree p = T -> Left;
        if(p) {
            while(p -> Right) p = p -> Right;
            if(T -> Data < p -> Data) return false;
        }
        if(T -> Right) return IsBST(T -> Right);
        else return true;
    }
  • 相关阅读:
    python初级 0 出发吧
    10 个免费的服务器监控工具推荐
    Nginx 的线程池与性能剖析
    Java中 Comparator接口 与Comparable 的区别
    ORACLE分区表、分区索引详解
    搜索引擎爬虫蜘蛛的USERAGENT大全
    ios和android的发展前景比较
    DES、3DES、AES加密方式
    jsp、freemarker、velocity区别详解
    面向对象五大原则(SRP、OCP、LSP、DIP、ISP)
  • 原文地址:https://www.cnblogs.com/8023spz/p/11872893.html
Copyright © 2011-2022 走看看