1147 Heaps (30 分)

完全二叉树的顺序存储处理;
注意完全二叉树顺序存储的几个性质(设从0开始):
1.对结点i, 若有左孩子, 则下标为i * 2 + 1;若有右孩子,则下标为i * 2 + 2;
2.共N个结点, 则最后一个非叶子节点是第N/2(向下取整)个结点(下标为N/2-1);

???连续两次30分大题都是30行代码

#include <cstdio>
#include <vector>
using namespace std;
int M, N;
void PostOrder( vector<int> Tree, int t )
{
    if( t < N )
    {
        PostOrder( Tree, t * 2 + 1 );
        PostOrder( Tree, t * 2 + 2 );
        printf("%d%s", Tree[t], t ? " ":"\n");
    }
}
int main()
{
    scanf("%d %d", &M, &N);
    for( int i = 0; i < M; ++i )
    {
        vector<int> Tree(N);
        int flagMax = 1, flagMin = 1;
        for( int j = 0; j < N; ++j )
            scanf("%d", &Tree[j]);
        for( int t = 0, l, r; t < ( N + 1 ) / 2 && ( flagMax || flagMin ); ++t )
        {
            l = t * 2 + 1, r = t * 2 + 2;
            if( Tree[t] < Tree[l] || ( r < N && Tree[t] < Tree[r] ) )
                flagMax = 0;
            if( Tree[t] > Tree[l] || ( r < N && Tree[t] > Tree[r] ) )
                flagMin = 0;
        }
        if( !flagMax && !flagMin )
            printf("Not Heap\n");
        else printf("%s\n", flagMax ? "Max Heap":"Min Heap");
        PostOrder( Tree, 0 );
    }
}

发布了152 篇原创文章 · 获赞 144 · 访问量 9225

猜你喜欢

转载自blog.csdn.net/qq_43749739/article/details/100588017