經典演算法學習——求二叉樹節點和為sum的路徑
阿新 • • 發佈:2019-02-07
在一棵二叉樹中,有多少個葉子節點,就會有多少條從根節點到葉子節點的路徑。如果給每一個節點一個data值,那麼每一條路徑經過的節點data加起來就為sum,現在根據給定的sum,請找出有哪些路徑符合這個sum。程式碼上傳至 https://github.com/chenyufeng1991/BinaryTreePath 。
整體思路就是遞迴的去檢索,每當經過一個節點的時候,就把節點值放入vector中,當到達葉子節點時,判斷此時vector中的和是否等於給定sum,等於的話表示這是一條符合條件的路徑,列印該路徑。否則清空vector,繼續檢索。
核心程式碼如下:
void PathLength(Node *node, vector<int> &vec, int sum) { if (node == NULL) { return; } if (node ->lChild != NULL) { vec.push_back(node->data); PathLength(node->lChild,vec,sum); } if (node ->rChild != NULL) { vec.push_back(node->data); PathLength(node->rChild,vec,sum); } if (node ->lChild == NULL || node ->rChild == NULL) { vec.push_back(node->data); int length = 0; for (int i = 0; i < vec.size(); i++) { length += vec[i]; } if (length == sum) { for (int i = 0; i < vec.size(); i++) { cout << vec[i] << " "; } cout << endl; } vec.clear(); } }