中序递归算法求哈夫曼树的带权路径

设Huffman树已采用二叉链表结构存储,求树的带权路径长度(WPL)的算法入下。其中ht为树根节点的指针,S为指针类型的栈(栈说明符为stype()),clearstack(s),puch(S,p),pop(S)和emptystack(S)分别为置栈空丶指针p进栈丶出栈和判断栈是否为空的函数。

算法:

typedef float weight;

typedef struct hnode{

    weight w;

    struct hnode *lchild,*rchild;

}hnode,*htptr;

weight HWPL(htpr ht){

    htpr p;//定义指针类型结构体p

    stype S;//声明栈S

    weight cwpl;//定义浮点类型cwpl

    cwpl=0;//cwpl赋初值

    clearstack(S);//清空栈S

    p=ht;//p作为遍历指针,指向根结点

    while(p || emptystack(S)){//大循环的条件是p不为空或栈不为空

        while(p->lchild){//红色字体部分为中序递归算法的核心部分

            push(S,p);

             p=p->lchild;

        }

        p=pop(S);

        if(p->lchild)//哈夫曼带权路径的另一种算法,见下图

            cwpl+=p->weight;

        p=p->rchild;

    }

    return(cwpl);

}

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值