真题2002 2017 求二叉树的带权路径长度

题目:二叉树的带权路径长度(WPL)是二叉树中所有叶节点的带权路径长度之和。给定一个二叉树T,采用二叉链表存储,节点结构为:
left weight right
其中叶结点的weight域保存该节点的非负权值。设root为指向T的根节点的指针,设计求WPL的算法。
解答:
基本设计思想:基于深度优先遍历的算法设计思想是用一个static变量记录WPL,把每个节点的深度作为递归函数的一个参数传递;
步骤:若该结点是叶节点,那么变量加上该节点的深度与权值之和
若是非叶节点,那么若左子树不为空,对左子树调用递归算法;若右子树不为空,对右子树调用递归算法;
最后返回计算出的WPL即可。

Typedef struct Binode{
	Int weight;
    Struct lode*left,*right; 
}Binode,*bitree;
Datatype wpl(bitree  root,int deep){
	Int depth=0;                            //初始设二叉树的深度为0
	If(root->left==null&&root->right==null)      //当为叶节点时,积累WPL
		Wpl+=root->weight*depth;         
	If(root->left!=null)                   //若节点的左子树存在,递归遍历
		wpl(root->left,depth+1)
		If(root->right!=null)                  //若节点的右子树存在,递归遍历
		wpl(root->right,depth+1)
		Return wpl;                      //最后返回计算所得值wpl
}

递归函数应该有:递归体,递归出口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章