直接深搜,就是一个带权路径的和,注意用flag去打标记。直接深搜是我的第一思路叭 代码如下:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ //有点像是pat的路径之和,用dfs()做一下吧 class Solution { public: int res=0; int pathSum(TreeNode* root, int sum) { dfs(root,sum,0,true); return res; } //表明的是这个点行不行 void dfs(TreeNode* root,int sum,int u,bool flag){ if(!root) return; u+=root->val; if(sum==u) res++; //表示没做过,所以才可以继续往下面去走 dfs(root->left,sum,u,false); dfs(root->right,sum,u,false); if(flag){ //更新路径,从当前的点去进行搜索,从当前的起点去进行dfs dfs(root->left,sum,0,true); dfs(root->right,sum,0,true); } } };看了一下,比较好的解答: