算法思路
该题要求找到从根节点到子节点的一条路径,满足路径上各结点数值之和等于目标值。求解方法为从根节点进行DFS,依次累加经过路径上的结点值,当到达叶子节点时,判断该路径上数值总和是否等于目标值。如果该结点还没有到达叶子节点,就递归其左右子树,同时传入当前已经累加的数值总和。
C ++算法
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int s;
bool hasPathSum(TreeNode* root, int sum) {
if (!root) return false;
s = sum;
return dfs(root, 0);
}
bool dfs(TreeNode* u, int sum)
{
sum += u -> val; //加上该点数值
if (!u -> left && !u -> right) //到达叶子节点
if (s == sum) return true; //总和等于目标值
if (u -> left) //左子树存在
if (dfs(u -> left, sum))
return true;
if (u -> right) //右子树存在
if(dfs(u -> right, sum))
return true;
return false;
}
};