求二叉树指定结点到根的路径c语言,二叉树根节点到叶子结点和为指定值的路径...
題目描述
image.png
題解
解題思路與二叉樹(shù)根節(jié)點(diǎn)到葉節(jié)點(diǎn)的所有路徑和一題相似,都是采用遞歸算法。但這個(gè)題加了一點(diǎn),要求保存路徑到vector中。
為了保存路徑,這里給遞歸函數(shù)傳遞一個(gè)vector類(lèi)型的參數(shù),用于保存從根節(jié)點(diǎn)到當(dāng)前節(jié)點(diǎn)的路徑。將當(dāng)前節(jié)點(diǎn)值追加到vector末尾,再向下層傳遞。當(dāng)?shù)竭_(dá)葉節(jié)點(diǎn)時(shí),判斷是否符合條件,如果符合,就將該路徑加到結(jié)果中。
到葉節(jié)點(diǎn)就可以完成判斷并得到路徑了,所以遞歸函數(shù)不需要返回值。
代碼
// pathSum.cpp
#include
#include
using namespace std;
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int val){
this->val = val;
this->left = NULL;
this->right = NULL;
}
};
class Solution {
public:
/**
*
* @param root TreeNode類(lèi)
* @param sum int整型
* @return int整型vector>
*/
vector > pathSum(TreeNode* root, int sum) {
// write code here
if (root == NULL){
return meet;
}
vector path;
targetSum = sum;
sumNumbers(root, root->val, path);
return meet;
}
private:
vector> meet;
int targetSum;
void sumNumbers(TreeNode* t, int sum, vector path){
path.push_back(t->val);
if (t->left == NULL && t->right == NULL){
if (sum == targetSum){
meet.push_back(path);
}
}
if (t->left != NULL){
sumNumbers(t->left, t->left->val + sum, path);
}
if (t->right != NULL){
sumNumbers(t->right, t->right->val + sum, path);
}
}
};
int main()
{
TreeNode* root = new TreeNode(5);
TreeNode* left = new TreeNode(4);
TreeNode* right = new TreeNode(8);
TreeNode* leftleft = new TreeNode(1);
TreeNode* leftright = new TreeNode(11);
TreeNode* leftrightleft = new TreeNode(2);
TreeNode* leftrightright = new TreeNode(7);
TreeNode* rightright = new TreeNode(9);
root->left = left;
root->right = right;
left->left = leftleft;
left->right = leftright;
leftright->left = leftrightleft;
leftright->right = leftrightright;
right->right = rightright;
Solution s;
vector> meet = s.pathSum(root, 22);
for (int i = 0; i < meet.size(); i++){
for (int j = 0; j < meet[i].size(); j++){
cout << meet[i][j] << " ";
}
cout << endl;
}
delete root;
delete left;
delete right;
delete leftleft;
delete leftright;
delete leftrightleft;
delete leftrightright;
delete rightright;
return 0;
}
總結(jié)
以上是生活随笔為你收集整理的求二叉树指定结点到根的路径c语言,二叉树根节点到叶子结点和为指定值的路径...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c语言得到系统的函数,c语言系统函数(C
- 下一篇: c语言 12大于12么,【C语言】第十二