经典笔试题: 二叉树中和为某一值的路径(路径总和)

简介: 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。

路径总和



题目描述(题目链接)


给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。


叶子节点 是指没有子节点的节点。


示例 1:


20210124133227222.png


输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true


示例 2:


2021012413324135.png



输入:root = [1,2,3], targetSum = 5
输出:false


示例 3:

输入:root = [1,2], targetSum = 0
输出:false


提示:

树中节点的数目在范围 [0, 5000] 内

-1000 <= Node.val <= 1000

-1000 <= targetSum <= 1000


分析


对于这种判断的,只要有一个满足条件的即可,在遍历路径上肯定使用dfs遍历。向下一层的时候就处理一下当前层的值,这样有一个满足的结果那么就可以返回true。当然,这里我就没有剪枝,如果有正确结果的话也可停止递归判断。


具体实现的代码为:


/**
 * 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;
    int value=targetSum-root.val;
    if(root.left==null&&root.right==null)
    {
      if(value==0)
        return true;
    }
    else {
      return hasPathSum(root.left,value)||hasPathSum(root.right, value);
    }
    return false;
    }
}



路径总和Ⅱ



题目描述(题目链接)

给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。


说明: 叶子节点是指没有子节点的节点。


示例:


给定如下二叉树,以及目标和 sum = 22,
              5
             / \
            4   8
           /   / \
          11  13  4
         /  \    / \
        7    2  5   1
返回:
[
   [5,4,11,2],
   [5,8,4,5]
]


分析:


这个问题就是要求返回所有满足要求的结果,和上题略有不同就是需要找到所有结果并且保存,保存结果的话我们就需要一个List<Integer>存储遍历的结果,而List<List<Integer>>用来存储所有的结果,所以在递归回溯的过程中就需要借助回溯的过程经过每一个状态,满足状态的就将这个List复制到结果集中去,需要返回的时候还需要移除当前层加入的结果。


具体实现的代码为:


/**
 * 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 {
    List<Integer> team = new ArrayList<Integer>();
  List<List<Integer>> value = new ArrayList<List<Integer>>();
  public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
    if (root == null)
      return value;
    team.add(root.val);
    targetSum-=root.val;
    if(targetSum==0&&root.left==null&&root.right==null)
    {
      value.add(new ArrayList<Integer>(team));
    }
    pathSum(root.left, targetSum);
    pathSum(root.right, targetSum);
    team.remove(team.size()-1);
    return value;
    }
}


原创不易,bigsai请你帮两件事帮忙一下:


star支持一下, 您的肯定是我在平台创作的源源动力。


微信搜索「bigsai」,关注我的公众号,不仅免费送你电子书,我还会第一时间在公众号分享知识技术。加我还可拉你进力扣打卡群一起打卡LeetCode。


记得关注、咱们下次再见!


目录
相关文章
【剑指offer】-二叉树中和为某一值的路径-24/67
【剑指offer】-二叉树中和为某一值的路径-24/67
|
8月前
|
算法
代码随想录算法训练营第十八天 | 力扣 513. 找树左下角的值、112. 路径总和、113. 路径总和 II、106. 从中序与后序遍历序列构造二叉树、105. 从前序与中序遍历序列构造二叉树
代码随想录算法训练营第十八天 | 力扣 513. 找树左下角的值、112. 路径总和、113. 路径总和 II、106. 从中序与后序遍历序列构造二叉树、105. 从前序与中序遍历序列构造二叉树
39 0
|
9月前
【Leetcode -111.二叉树的最小深度 -112.路径总和】
【Leetcode -111.二叉树的最小深度 -112.路径总和】
30 0
图解LeetCode——437. 路径总和 III
图解LeetCode——437. 路径总和 III
64 1
图解LeetCode——437. 路径总和 III
|
11月前
|
存储 算法
算法训练Day18|● 513.找树左下角的值● 112. 路径总和 113.路径总和ii● 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
算法训练Day18|● 513.找树左下角的值● 112. 路径总和 113.路径总和ii● 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
|
存储 算法 Java
代码随想录训练营day18| 513.找树左下角的值 112. 路径总和 106.从中序与后序遍历序列构造二叉树...
代码随想录训练营day18| 513.找树左下角的值 112. 路径总和 106.从中序与后序遍历序列构造二叉树...
剑指offer 35. 二叉树中和为某一值的路径
剑指offer 35. 二叉树中和为某一值的路径
42 0
|
存储 前端开发 程序员
二叉树中和为某一值的路径
二叉树中和为某一值的路径
二叉树中和为某一值的路径
|
算法
二叉树中和为某一值的路径(中等难度)
二叉树中和为某一值的路径(中等难度)
67 0
二叉树中和为某一值的路径(中等难度)
代码随想录刷题|LeetCode 513. 找树左下角的值 112. 路径总和 113.路径总和|| 106. 从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
代码随想录刷题|LeetCode 513. 找树左下角的值 112. 路径总和 113.路径总和|| 106. 从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
代码随想录刷题|LeetCode 513. 找树左下角的值 112. 路径总和 113.路径总和|| 106. 从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树