题目地址:
https://leetcode.com/problems/path-sum/
判断一棵二叉树是否有从根到叶子的路径和等于给定的sum。可以用递归来解决,存在从根到叶子的路径和等于给定的sum,当且仅当存在从左子树根到左子树叶子的路径和等于给定的sum-root.val
或者存在从右子树根到左子树叶子的路径和等于给定的sum-root.val
。代码如下:
public class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
// 特判一下空树
if (root == null) {
return false;
}
// 递归出口是,如果root就是叶子节点,返回该叶子是否等于sum
if (root.left == null && root.right == null) {
return root.val == sum;
}
// 递归求解左子树和右子树
return hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val);
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( h ) O(h) O(h)。