哈夫曼树

#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;

struct TNode{
    int value = -1;
    TNode *left = NULL;
    TNode *right = NULL;
};

vector<TNode*> arr;

bool cmp(TNode *a,TNode *b){
    return a->value >= b->value;
}
void preShow(TNode *root){
    if(root){
        printf("%d ",root->value);
        preShow(root->left);
        preShow(root->right);
    }
}

int main(){
    int inp[5]={1,2,3,4,5};
    for(int i=0;i<5;i++){
        TNode *s=new TNode;
        s->value=inp[i];
        arr.push_back(s);
    }
    make_heap(arr.begin(),arr.end(),cmp);
    int i=0;
    while(arr.size()>1){
        TNode *s=new TNode;
        TNode *l,*r;
        l=arr[0];
        pop_heap(arr.begin(),arr.end(),cmp);
        arr.pop_back();
        printf("%d ",l->value);
        r=arr[0];
        pop_heap(arr.begin(),arr.end(),cmp);
        arr.pop_back();
        printf("%d \n",r->value);
        s->left=l;
        s->right=r;
        s->value=l->value+r->value;
        arr.push_back(s);
        push_heap(arr.begin(),arr.end(),cmp);
    }

    preShow(arr[0]);

    return 0;
}

 

posted @ 2020-06-02 15:51  落地就是一把98K  阅读(173)  评论(0)    收藏  举报