WPL求和 | 递归deep+1

【14统考】二叉树的带权路径长度WPL是二叉树中所有叶结点的带权路径之和。给定一棵二叉树T,采用二叉链表存储,结点结构为 left | weight | right 其中叶结点的weight域保存该结点的非负权值,设root为指向T的根节点的指针,请设计求T的WPL的算法。

1、非递归

typedef struct {
  int weight;
  struct BiTNode *left,*right;
}BiTNode,*BiTree;

int Sum_WPL(BiTree T){
   BiTree Q(MaxSize);//Q[0]不存储
   Q[++rear]=T;
   BiTNode *p;
   int wpl=0,level=1,last=1;
   int front=0;rear=0;
   while(front<rear){
    p=Q[++front];
    if(p->left=NULL&&p->right=NULL){
    wpl+=level*p->weight;
    }else{
        
        if(p->left)
           Q[++rear]=p->left;
        if(p->right)
           Q[++rear]=p->right;
     }
     if(front==last){
        level++;
        last=rear;
     }
  }
}
    

2、递归

int wpl(BiTree T,int deep){
    int wpl=0;
    if(T->left==NULL&&T->right==NULL)
       wpl+=deep*T->weight;
     if(T->left!=NULL)
       wpl(T->left,deep+1);
     if(T->right!=NULL)
       wpl(T->right,deep+1);
   return wpl;
}

int WPL(BiTree T) {
 return wpl(T,0);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值