牛客BM29 二叉树中和为某一值的路径(一)
题目:
思路:不需要记录路径
/*最后一行与以下3行等价,思路是前序遍历(深度优先)
* 每次递归都用sum减掉当前结点的val,直到遍历到叶子;
* 如果减掉叶子结点的值后,sum还不为0,那就说明当前路径不符合要求
* */
代码:
public boolean hasPathSum (TreeNode root, int sum) {
if(root == null) return false;
if(root.left == null && root.right == null) {//是叶子
if((sum - root.val) == 0) return true;
}
boolean l = hasPathSum(root.left, sum - root.val);
boolean r = hasPathSum(root.right, sum - root.val);
return l || r;
}
精简版:
public boolean hasPathSum (TreeNode root, int sum) {
if(root == null) return false;
if(root.left == null && root.right == null) {//是叶子
if((sum - root.val) == 0) return true;
}
return hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val);
}