路径总和
原做法, 用了sum保存根节点到当前节点的值
class Solution {
public boolean hasPathSum(TreeNode root, int targetSum) {
return recur(root, targetSum, 0);
}
public boolean recur(TreeNode root, int targetSum, int sum) {
if(root == null)
return false;
sum += root.val;
if(root.left == null && root.right == null && sum == targetSum)
return true;
return recur(root.left, targetSum, sum) || recur(root.right, targetSum, sum);
}
}
假定从根节点到当前节点的值之和为 val,我们可以将这个大问题转化为一个小问题:是否存在从当前节点的子节点到叶子的路径,满足其路径和为 sum - val
class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
if (root == null) {
return false;
}
if (root.left == null && root.right == null) {
return sum == root.val;
}
return hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val);
}
}
最后一个单词的长度
一开始用双指针, 由头开始统计, 其实可以反向遍历