真題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
}

遞歸函數應該有:遞歸體,遞歸出口

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