解题思路
采用深度优先搜索,往下遍历时中间变量path
加上被遍历节点的val
,当遍历到叶节点时计算path
与sum
是否相等,相等则返回true
代码
class Solution {
boolean result = false;
public boolean hasPathSum(TreeNode root, int sum) {
if (root == null) {
return false;
}
dfs(root, sum, 0);
return result;
}
private void dfs(TreeNode root, int sum, int path) {
if (root == null) {
return;
}
int cur = path + root.val; // 加上本节点后的path值
// 如果是叶节点
if (root.left == null && root.right == null) {
if (cur == sum) { // 满足条件
result = true;
}
} else { // 如果不是叶节点
dfs(root.left, sum, cur);
dfs(root.right, sum, cur);
}
}
}