PTA 是否二叉搜索树 (25分)
阅读原文时间:2023年07月11日阅读:1

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
    #include

    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;

    }
    /* 你的代码将被嵌在这里 */

Yes

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 ));
}


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;
}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章