二叉树中和为某一值的路径(中等难度)

简介: 二叉树中和为某一值的路径(中等难度)

目录

题目概述(中等难度)

思路与代码

思路展现

代码示例

题目概述(中等难度)

2.png


题目链接:

点我进入leetcode


思路与代码

思路展现

这道题目的思路首先要知道如果我们是求路径之和,那必定是使用DFS,如果是存在多条路径,就可以用回溯,这道题目依旧是经典的回溯算法题目,也是面试常考题目,大家如果对回溯不了解的话可以来我的这篇博客进行查看:

点我进入博客进行查看


代码示例

/**
 * 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<List<Integer>> result = new ArrayList<>();
    //官方建议使用Deque,也就是双端队列
    Deque<Integer> path = new LinkedList<>(); // LinkedList方便添加和移除元素
    public List<List<Integer>> pathSum(TreeNode root, int target) {
        if (root == null) return result;
        //先将根节点加入到我们的路径当中
        path.addLast(root.val);
        backtracking(root, target, root.val);
        return result;
    }
    private void backtracking(TreeNode node, int target, int sum) {
        //定义我们的递归结束条件
        if (node.left == null && node.right == null && sum == target) { // 返回结果时节点须为叶子节点
            result.add(new ArrayList<>(path)); // 生成一个新的array list
            return;
        }
        if (node.left != null) { // 左子节点不为空, DFS左子节点
            path.addLast(node.left.val);
            backtracking(node.left, target, sum + node.left.val);
            // 回溯
            path.removeLast(); 
        }
        if (node.right != null) { // 右子节点不为空, DFS右子节点
            path.addLast(node.right.val);
            backtracking(node.right, target, sum + node.right.val);
            // 回溯
            path.removeLast(); 
        }
        // 左右子节点都为空, sum != target, 什么都不用做
    }
}

2.png

相关文章
|
3月前
leetcode代码记录(二叉树的最小深度
leetcode代码记录(二叉树的最小深度
21 0
|
3月前
|
算法 JavaScript 测试技术
动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本
动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本
LeetCode刷题Day16——二叉搜索树(搜索、验证、最小绝对差、众数)
一、二叉搜索树中的搜索 题目链接:700. 二叉搜索树中的搜索
|
9月前
|
算法
代码随想录算法训练营第十八天 | 力扣 513. 找树左下角的值、112. 路径总和、113. 路径总和 II、106. 从中序与后序遍历序列构造二叉树、105. 从前序与中序遍历序列构造二叉树
代码随想录算法训练营第十八天 | 力扣 513. 找树左下角的值、112. 路径总和、113. 路径总和 II、106. 从中序与后序遍历序列构造二叉树、105. 从前序与中序遍历序列构造二叉树
45 0
|
算法
删除链表中间节点(变形题目,简单难度)
删除链表中间节点(变形题目,简单难度)
79 1
删除链表中间节点(变形题目,简单难度)
从上到下打印二叉树 III(中等难度)
从上到下打印二叉树 III(中等难度)
69 0
从上到下打印二叉树 III(中等难度)
树的子结构(中等难度,好题目)
树的子结构(中等难度,好题目)
79 0
树的子结构(中等难度,好题目)
二叉搜索树的后序遍历序列(中等难度)
二叉搜索树的后序遍历序列(中等难度)
75 0
二叉搜索树的后序遍历序列(中等难度)
从前序与中序遍历序列构造二叉树(中等难度)
从前序与中序遍历序列构造二叉树(中等难度)
90 0
从前序与中序遍历序列构造二叉树(中等难度)
从上到下打印二叉树 II(简单难度)
从上到下打印二叉树 II(简单难度)
59 0
从上到下打印二叉树 II(简单难度)