真題2002 2017 求二叉樹的帶權路徑長度
阿新 • • 發佈:2018-11-04
題目:二叉樹的帶權路徑長度(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 }
遞迴函式應該有:遞迴體,遞迴出口