算法编程(七):路径总和

99 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

写在前面

今天我们继续来解题,还是一道难度系数为简单的题目,《路径总和》。

这是一道关于二叉树的题目,所以要对二叉树这个数据结构有一定的理解,做完这道题,也可以让我们对二叉树有所了解了。

一起来看一下吧。

image.png

题目解读

从题目的标题来看,就是一个求和问题。

但是从题目的描述来看,这其实是一个二叉树中各节点的求和问题。

同时在代码模板中也给出了两个参数,一个是二叉树本数,一个是总值。

需要判断出二叉树中的路径包含的数字之和能否与总值相对应。

注意,这里有一个点要注意,是路径的数字之和,这里的路径是只从顶部到任何尾部才算的上是路径。

所以,这里的判断需要加入子节点是否为空的判断才行。

大概思路理清之后,我们来看一下具体的实现吧。

代码实现

本次的运行代码如下,很简洁,正确使用递归处理二叉树,绝对是非常好的选择。

/**
 * 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);
    }
}

执行结果:

今天的运行很满意,又快又简洁,几乎几行代码就解决了问题。

image.png

其他思路

很多大佬使用DFS算法之类的,我有点搞不动,大家有兴趣的自己去了解一下吧。

总结

今天的题目是关于二叉树的,使用的是递归的概念去处理了,考察的也自然是递归、二叉树两个点,还有不明白的吗?评论区见了。