LeetCode/112. 路经总和

112. 路径总和

给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。

说明: 叶子节点是指没有子节点的节点。

示例:
给定如下二叉树,以及目标和sum = 22

1
2
3
4
5
6
7
      5
/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1

返回 true, 因为存在目标和为22 的根节点到叶子节点的路径 5->4->11->2

来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解:

本题思想就是递归调用左右子树,观察树节点的值加起来是不是sum的值,具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class TreeNode {
int val;
TreeNode left;
TreeNode right;

TreeNode(int x) {
val = x;
}
}

class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
//判断树是否为空,若为空直接返回false
if (root == null)
return false;
//判断根的左右节点是否为空,若左右节点都为空,则返回sum - root.val的值与0作比较
//若根节点的值等于sum的值,则返回true,否则返回false
if (root.left == null && root.right == null)
return sum - root.val == 0;
//递归调用左子树,或上递归调用右子树,若左子树中或右子树中满足条件则返回true,否则返回false
return hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val);
}
}

Comments