【31】給定一個二叉樹打印出所有從根結點到葉子結點路徑和為 k 的路徑
阿新 • • 發佈:2018-12-30
題目:給定一個二叉樹要求打印出所有從根結點到葉子結點路徑和為value的路徑
例如,給定二叉樹如下要求打印出所有和為9的路徑,有1->6->3->-1和1->7->4->-3
分析:
1. 要找到所有的路徑,利用前序遍歷即可做到,我們維護一個數組儲存路徑上面的點,同時維護一個sum,當到達葉子結點的時候判斷是否相等即可
2. 程式碼
//二叉樹結點 struct BinaryTreeNode{ int value; BinaryTreeNode *lson; BinaryTreeNode *rson; }; //列印路徑 void Print(int *path, int n){ for(int i = 0; i < n; i++){ cout<<path[i]<<" "; } cout<<endl; } //列印和為k的所有路徑 void PrintPath(BinaryTreeNode *root, int *path, int pos, int sum, int k){ //不合法資料 if(path == NULL){ return; } //到底葉子結點 if(root == NULL){ //和為value就列印 if(sum == k){ Print(path, pos); } } path[pos] = root->value; PrintPath(root->lson, path, pos+1, sum+root->value, k); PrintPath(root->rson, path, pos+1, sum+root->value, k); }