叶子结点带权路径长度和(先序遍历法和层序遍历法)
程序员文章站
2024-02-26 11:10:28
...
先序遍历
//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;
}
下一篇: 将文件名中的空格替换,重命名