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

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

目录

题目概述(中等难度)

思路与代码

思路展现

代码示例

题目概述(中等难度)

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

相关文章
|
算法
带你读《图解算法小抄》十二、树(5)
带你读《图解算法小抄》十二、树(5)
195 0
|
存储 SQL
物料清单应用输入模板的SQL存储过程设计
物料清单应用输入模板的SQL存储过程设计
139 0
|
数据可视化 数据库 Python
照片美妆---人脸老化
原文:照片美妆---人脸老化 本文转载自http://www.sohu.com/a/131656765_642762 论文名称《Age Progression/Regression by Conditional Adve...
1957 0
|
11天前
|
数据采集 人工智能 安全
|
7天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
338 164