写在前面
今天我们继续来解题,还是一道难度系数为简单的题目,《路径总和》。
这是一道关于二叉树的题目,所以要对二叉树这个数据结构有一定的理解,做完这道题,也可以让我们对二叉树有所了解了。
一起来看一下吧。
题目解读
从题目的标题来看,就是一个求和问题。
但是从题目的描述来看,这其实是一个二叉树中各节点的求和问题。
同时在代码模板中也给出了两个参数,一个是二叉树本数,一个是总值。
需要判断出二叉树中的路径包含的数字之和能否与总值相对应。
注意,这里有一个点要注意,是路径的数字之和,这里的路径是只从顶部到任何尾部才算的上是路径。
所以,这里的判断需要加入子节点是否为空的判断才行。
大概思路理清之后,我们来看一下具体的实现吧。
代码实现
本次的运行代码如下,很简洁,正确使用递归处理二叉树,绝对是非常好的选择。
/** * 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; } if(root.val == targetSum && root.left == null && root.right == null){ return true; } return hasPathSum(root.left, targetSum - root.val) || hasPathSum(root.right, targetSum - root.val); } }
执行结果:
今天的运行很满意,又快又简洁,几乎几行代码就解决了问题。
其他思路
很多大佬使用DFS算法之类的,我有点搞不动,大家有兴趣的自己去了解一下吧。
总结
今天的题目是关于二叉树的,使用的是递归的概念去处理了,考察的也自然是递归、二叉树两个点,还有不明白的吗?评论区见了。