题目地址(112. 路径总和)
https://leetcode-cn.com/problems/path-sum/
题目描述
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true解释:等于目标和的根节点到叶节点路径如上图所示。示例 2:输入:root = [1,2,3], targetSum = 5输出:false解释:树中存在两条根节点到叶子节点的路径:(1 --> 2): 和为 3(1 --> 3): 和为 4不存在 sum = 5 的根节点到叶子节点的路径。示例 3:输入:root = [], targetSum = 0输出:false解释:由于树是空的,所以不存在根节点到叶子节点的路径。提示:树中节点的数目在范围 [0, 5000] 内-1000 <= Node.val <= 1000-1000 <= targetSum <= 1000
前置知识
公司
- 暂无
思路
返回值 Boolean
中止条件 遍历到叶子节点判断值是否等于0
循环判断 不要让null进入递归
关键点
代码
- 语言支持:Java
Java Code:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/class Solution {public boolean hasPathSum(TreeNode root, int targetSum) {if (root == null) {return false;}targetSum -= root.val;if (root.left == null && root.right == null) {return targetSum == 0;}if (root.left != null) {boolean b = hasPathSum(root.left, targetSum);if (b) {return true;}}if (root.right != null) {boolean r = hasPathSum(root.right, targetSum);if (r) {return true;}}return false;}}
复杂度分析
令 n 为数组长度。
- 时间复杂度:
#card=math&code=O%28n%29&id=wE5TV)
- 空间复杂度:
#card=math&code=O%28n%29&id=Adtvj)
