标题:用数组储存heap sort,怎么用postorder打印?
只看楼主
xiestone1992
Rank: 1
等 级:新手上路
帖 子:19
专家分:3
注 册:2012-2-8
结帖率:33.33%
已结贴  问题点数:10 回复次数:10 
用数组储存heap sort,怎么用postorder打印?
如题,Min-heap 我用数组储存的方式。大部分操作我都已经实现,比如delete min ,  find  min 但是就是用postorder打印,我就想不出來,求大家幫幫忙,下面是我程序的ADT


        typedef int ElementType;
        struct HeapStruct;
        typedef struct HeapStruct *PriorityQueue;
        typedef struct HeapStruct BTNode;
        PriorityQueue Initialize( int MaxElements );
        void Destroy( PriorityQueue H );
        void MakeEmpty( PriorityQueue H );
        void Insert( ElementType X, PriorityQueue H );
        ElementType DeleteMin( PriorityQueue H );
        ElementType FindMin( PriorityQueue H );
        int IsEmpty( PriorityQueue H );
        int IsFull( PriorityQueue H );
        
       //下面这个就是希望大家帮我想想的,谢谢了,可以修改参数。
        void postorder ( PriorityQueue H );
搜索更多相关主题的帖子: void 打印 
2012-12-13 18:04
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
得分:10 
以下是引用xiestone1992在2012-12-13 18:04:23的发言:

如题,Min-heap 我用数组储存的方式。大部分操作我都已经实现,比如delete min ,  find  min 但是就是用postorder打印,我就想不出來,求大家幫幫忙,下面是我程序的ADT


        typedef int ElementType;
        struct HeapStruct;
        typedef struct HeapStruct *PriorityQueue;
        typedef struct HeapStruct BTNode;
       PriorityQueue Initialize( int MaxElements );
        void Destroy( PriorityQueue H );
        void MakeEmpty( PriorityQueue H );
        void Insert( ElementType X, PriorityQueue H );
        ElementType DeleteMin( PriorityQueue H );
        ElementType FindMin( PriorityQueue H );
        int IsEmpty( PriorityQueue H );
        int IsFull( PriorityQueue H );
        
       //下面这个就是希望大家帮我想想的,谢谢了,可以修改参数。
        void postorder ( PriorityQueue H );



真不知道你这是要干嘛,看看蓝色部分,自定义struct HeapStruct为*PriorityQueue?然后又用PriorityQueue ?这对吗?

小小战士,战士中的战斗机!
2012-12-13 18:13
xiestone1992
Rank: 1
等 级:新手上路
帖 子:19
专家分:3
注 册:2012-2-8
得分:0 
回复 2楼 小小战士
不用担心这个啦,总之上面的都可以运行的。至于你说的那个,纯粹是为了比较清晰名字的含义。
还是帮我想想怎么用postorder打印,好吗?
2012-12-13 18:23
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
得分:0 
回复 3楼 xiestone1992
不知道你要打印什么,打印应该在这个程序中是最好实现的啊

小小战士,战士中的战斗机!
2012-12-13 18:30
xiestone1992
Rank: 1
等 级:新手上路
帖 子:19
专家分:3
注 册:2012-2-8
得分:0 
回复 4楼 小小战士
就是用postorder,就是  后序  打印min heap
2012-12-13 18:33
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
得分:0 
以下是引用xiestone1992在2012-12-13 18:33:36的发言:

就是用postorder,就是  后序  打印min heap


是不是按后序遍历打印二叉树啊?说清楚啊

小小战士,战士中的战斗机!
2012-12-13 18:42
xiestone1992
Rank: 1
等 级:新手上路
帖 子:19
专家分:3
注 册:2012-2-8
得分:0 
回复 6楼 小小战士
对啊,但是我因为使用数组作为储存,而不是指针,所以不能用一下的方式打印



        void
        postorder( BTNode *node )
        {
            if ( node != NULL )
            {
                postorder ( node->Left );
                postorder ( node->Right );
                printf("%d ",node -> Element);
            }
        
        }
2012-12-13 18:50
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
得分:0 
在数组中是怎样存储的?连接的顺序是怎样啊?说清啊,怎么给你说啊

小小战士,战士中的战斗机!
2012-12-13 19:35
xiestone1992
Rank: 1
等 级:新手上路
帖 子:19
专家分:3
注 册:2012-2-8
得分:0 
回复 8楼 小小战士
这是插入的代码
        void
        Insert( ElementType X, PriorityQueue H )
        {
            int i;

            if( IsFull( H ) )
            {
                Error( "Priority queue is full" );
                return;
            }

            for( i = ++H->Size; H->Elements[ i / 2 ] > X; i /= 2 )
                H->Elements[ i ] = H->Elements[ i / 2 ];
            H->Elements[ i ] = X;
        }


不是跟我说,是想你帮我写出来,怎么用后序遍历打印
2012-12-13 19:39
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
得分:0 
请大牛来看看,我帮不了你了,水平不够,后序也就7楼那样打印啊

小小战士,战士中的战斗机!
2012-12-13 19:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-391121-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.218472 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved