叶子结点带权路径长度和(先序遍历法和层序遍历法)

先序遍历

//deep初值为0
int leafNodeLength(Tree r,deep)
{
    static int wpl=0;
    if(r->lchild==NULL&&r->rchild==NULL)
        wpl+=deep*r->weight;
    if(r->lchild)
        leafNodeLength(r->lchild,deep+1);
    if(r->rchild)
        leafNodeLength(r->rchild,deep+1);
    return wpl;
}

层序遍历法

int leafNodeLength(Tree r)
{
    Tree p=r;
    queue Q;
    Enqueue(Q,p);
    int wpl=0;//叶子结点带权路径长度和
    int lastVisit=1;//该层最右一个结点的编号
    int nowVisit=0,number=1;//nowVisit:现在刚弹出队列的结点编号,number现在入队的结点编号
    int deep=0;
    while(!empty(Q)){
        Dequeue(Q,p);
        nowVisit++;
        if(p->lchild==NULL&&p->rchild==NULL)
            wpl+=deep*p->weight;
        if(p->lchild){
            Enqueue(p->lchild);
            number++;
        }
        if(p->rchild){
            Enqueue(p->rchild);  
            number++;
        }
        if(lastVisit==nowVisit)
            lastVisit=number;
    }
    return wpl;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值