二叉樹的路徑和-LintCode
阿新 • • 發佈:2019-01-04
描述:
給定一個二叉樹,找出所有路徑中各節點相加總和等於給定 目標值
的路徑。
一個有效的路徑,指的是從根節點到葉節點的路徑。
樣例:
給定一個二叉樹,和 目標值 = 5
:
1
/ \
2 4
/ \
2 3
返回:
[
[1, 2, 2],
[1, 4]
]
思路:
我們遍歷從根節點到葉子的所有路徑,定義sum為路徑經過節點值之和,若sum等於給定值,我們就輸出該條路徑中的節點組成的vector。
此題中的遞迴跳出條件為訪問完成了葉子節點。
程式碼:
/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */ class Solution { public: /** * @param root the root of binary tree * @param target an integer * @return all valid paths */ vector<vector<int>> va; void pathsum(TreeNode *root,int sum,int goal,vector<int> v) { if(root->left==NULL && root->right==NULL) { if(sum==goal) va.push_back(v); return; } int s; if(root->left!=NULL) { vector<int> vm(v); s=sum+root->left->val; vm.push_back(root->left->val); pathsum(root->left,s,goal,vm); } if(root->right!=NULL) { vector<int> vm(v); s=sum+root->right->val; vm.push_back(root->right->val); pathsum(root->right,s,goal,vm); } } vector<vector<int>> binaryTreePathSum(TreeNode *root, int target) { // Write your code here if(root==NULL) return va; vector<int>v; v.push_back(root->val); pathsum(root,root->val,target,v); return va; } };