- 带权路径之和:从根节点开始到叶结点经过的边数 * 叶子结点的权值
边数 = 高 - 1 - 使用层次遍历的方式,每次将当前层所有结点的叶子结点放入队列中,当前层结点出队,从根开始,就是每次先获取队列的长度len,队列的长度len就是当前层的结点数,然后出队len个数,出队的同时判断是否为叶子结点,或当左右孩子不为空时,加入队列中。
上代码
int countWPL(Tree* tree)
{
queue<Tree*> qu;
int num = 0;
int sum = 0;
if(tree){
qu.push(tree);
while(!qu.empty()){
int len = qu.size();
num++;
for(int i=0;i<len;i++){
Tree* t = qu.front();
if(t->lchild){
qu.push(t->lchild);
}
if(t->rchild){
qu.push(t->rchild);
}
if(!t->rchild && !t->lchild){
sum += (num-1) * t->data;
}
qu.pop();
}
}
}
return sum;
}