1043 Is It a Binary Search Tree (25 分)

版权声明:本文为博主原创文章,欢迎交流学习,未经博主允许不得转载。 https://blog.csdn.net/qq_43749739/article/details/90003726

注:备战2020ing…暂时没时间注解啦,大家凑合先看下代码叭,肥宅对不住了。

#include <cstdio>
#include <cstdlib>
typedef struct BstNode
{
    int data;
    struct BstNode *lchild, *rchild;
}BstNode, *Bstree;
int data[1000], N;
void Insert( Bstree &T, int K )
{
    if( !T )
    {
        T = (Bstree) malloc( sizeof( BstNode ) );
        T->data = K;
        T->lchild = T-> rchild = NULL;
    }
    else if( T->data > K )
        Insert( T->lchild, K );
    else Insert( T->rchild, K );
}
void Invert( Bstree &T )
{
    if( T )
    {
        Invert( T->rchild );
        Invert( T->lchild );
        BstNode *t = T->rchild;
        T->rchild = T->lchild;
        T->lchild = t;
    }
}
bool isBST( Bstree T, int &i )
{
    if( !T )
        return true;
    if( T->data != data[i++] )
        return false;
    if( isBST( T->lchild, i ) )
        return isBST( T->rchild, i );
    return false;
}
bool PostOrder( Bstree T, int &cnt)
{
    if(T)
    {
        PostOrder( T->lchild, cnt );
        PostOrder( T->rchild, cnt );
        printf("%s%d%s", !(cnt++) ? "YES\n":"", T->data, cnt == N - 1 ? "":" ");
    }
}
int main()
{
    Bstree T = NULL;
    int k1 = 0, k2 = 0, cnt = 0;
    scanf("%d", &N);
    for( int i = 0; i < N; ++i )
    {
        scanf("%d", &data[i]);
        Insert(T, data[i]);
    }
    if( isBST( T, k1 ) )
        PostOrder( T, cnt );
    else
    {
        Invert( T );
        if( isBST( T, k2 ) )
            PostOrder( T, cnt );
        else
            printf("NO");
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43749739/article/details/90003726
今日推荐