JZ84 二叉树中和为某一值的路径(三)




思路:
既然要找到所有路径上节点和等于目标值的路径个数,就肯定要先找到这样的路径起点。
但是我们不知道起点在哪,而且任意节点都有可能是起点。
以前序遍历二叉树的所有节点,每个节点都可以作为一次起点,即子树的根节点。
class Solution {
public:
//先序遍历找路径
void PreOrder(TreeNode* root, int sum)
{
if(root == NULL)
return;
//符合目标值
if(sum == root->val)
res++; //路径个数+1
//进入字节的继续寻找
PreOrder(root->left, sum-root->val);
PreOrder(root->right, sum-root->val);
}
int res = 0; //用来存路径的个数
int FindPath(TreeNode* root, int sum) {
// write code here
//求该树有多少条路径的节点值之和等于sum值
//树为空则返回
if(root == NULL)
return res;
//查询某个节点为根的路径个数
PreOrder(root, sum);
//找到其子节点为根的路径
FindPath(root->left, sum);
FindPath(root->right, sum);
return res;
}
};

浙公网安备 33010602011771号