面试热题(路径总和II)

news2024/11/24 20:29:32

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

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

 在这里给大家提供两种方法进行思考,第一种方法是递归,第二种方式使用回溯的方式进行爆搜

        递归:树具有天然的递归结构,将一个大的问题转换成多个相同的子问题而进行解决,就相当于你会0-1的算式,你自然而然可以推导出0-n的算式(递归终止条件+递归操作

       我觉的这个图可以很形象的说明一些问题,通过改变每个结点的差值,最后进行叶子结点与传入的target进行比较,如果相等,就说明树中肯定有满足情况的路径

解题步骤:

  • 方法中返回什么,我们就创建什么
 public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
        List<List<Integer>> resList=new LinkedList<>();
        ...
    }
  • 递归结束的条件(分为第一次入参和叶子结点的入参,两者的操作不一样)
        //如果传进行的叶子结点为空,直接返回一个空链表
         if(root==null){
            return resList;
        }
        //如果是叶子结点且叶子结点的值等于target,则该叶子结点是满足情况下的一条路径上的值
        if(root.left==null&&root.right==null){
            if(root.val==targetSum){
                List<Integer> list=new LinkedList<>();
                list.add(root.val);
               //将该路径加入总结果集中
                resList.add(list);
            }
            return resList;
        }
  • 每次递归的时候将target-root.val作为参数传下去
int diff=targetSum-root.val;
  • 如果左树不为空,递归左树,如果右树不为空,递归右树
        if(root.left!=null){
            List<List<Integer>> curList=pathSum(root.left,diff);
            for(int i=0;i<curList.size();i++){
                List<Integer> list1=curList.get(i);
                //将该节点加入路径中
                list1.add(0,root.val);
                //加入到结果集中
                resList.add(list1);
            }
        }
        if(root.right!=null){
            List<List<Integer>> curList=pathSum(root.right,diff);
            for(int i=0;i<curList.size();i++){
                List<Integer> list1=curList.get(i);
                list1.add(0,root.val);
                resList.add(list1);
            }
        }
  • 最后每次递归结束后返回结果集,供归的时候进行使用
return resList;

方法二:回溯 

回溯的方法相当于暴力搜索一样,但是对于面试而言,我更加推荐回溯(比较容易记忆)

    //大体思想其实和递归差不多,就是回溯这种题有个特定的模板,有的时候,即使你不会做,那你也有可能把题做出来
    List<List<Integer>> resList=new LinkedList<>();
    List<Integer> path=new LinkedList<>();
    public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
        if(root==null){
            return resList;
        }
        backtracing(root,targetSum);
        return resList;
    }
    public void backtracing(TreeNode root,int targetSum){
        if(root==null){
            return;
        }
        path.add(root.val);
        if(targetSum==root.val&&root.left==null&&root.right==null){
            resList.add(new ArrayList<>(path));
        }
        int diff=targetSum-root.val;
        if(root.left!=null){
            pathSum(root.left,diff);
           //回溯
           path.remove(path.size()-1);}
        if(root.right!=null){
            pathSum(root.right,diff);
            path.remove(path.size()-1);
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/857067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

携程验证码

今日话题&#xff1a;凑字数水文章。大表哥们感兴趣可以看看。 携程验证类型总共有3种。无感&#xff0c;滑块&#xff0c;点选。 process_type&#xff1a;None为无感 验证接口&#xff1a;https://ic.ctrip.com/captcha/v4/risk_inspect process_type&#xff1a;JIGSAW为…

opencv带GStreamer之Windows编译

目录 1、下载GStreamer和安装2. GSTReamer CMake配置3. 验证是否配置成功 1、下载GStreamer和安装 下载地址如下&#xff1a; gstreamer-1.0-msvc-x86_64-1.18.2.msi gstreamer-1.0-devel-msvc-x86_64-1.18.2.msi 安装目录无要求&#xff0c;主要是安装完设置环境变量 xxx\1…

无涯教程-Perl - getservbyport函数

描述 此功能转换协议PROTO的服务编号PORT,在标量context中返回服务名称,并在列表context中返回名称和相关信息- ($name,$aliases,$port_number,$protocol_name) 该调用基于/etc/services文件返回这些值。 语法 以下是此函数的简单语法- getservbyport PORT, PROTO返回值 …

科学家揭示:爱的能量是光——能够治愈一切!

当你和你的恋人食指相触时&#xff0c;指尖发出的辉光会产生闪电般绚烂的连结&#xff1b; 当你对着亲密的另一半说“我爱你”时&#xff0c;一团物质能量随即从你的胸口释出&#xff0c;飞向另一个人——这听起来像魔幻电影般的场景&#xff0c;却是实实在在的物理现象。 1、人…

uniapp input输入框placeholder文本右对齐

input输入框placeholder文本右对齐 给input标签加上placeholder-class&#xff0c;这个是给placeholder设置样式&#xff0c;右对齐这就是text-align:right;字体颜色之类依次编辑即可。

python——案例13:显示现在的时间

案例13&#xff1a;显示现在的时间import timefor i in range(1):print(time.strftime(%Y-%m-%d %H:%M:%S,time.localtime(time.time())))

GLSL用于图像处理

Pipeline 硬件处理顶点和片段的Pipeline 软件的输入 顶点着色器 顶点的glsl 输入–特殊全局变量 变量 类型 指定函数 描述 gl_ Vertex vec4 glVertex 顶点的全局空间坐标 gl_Color vec4 glColor 主颜色值 gl_SecondaryColor vec4 glSecondaryColor 辅助颜色值 gl_Normal …

布谷鸟配音:智能文字转语音配音软件

这是一款主打文字转语音功能的智能配音软件&#xff0c;它提供了数百种不同风格、具备真人发声效果的配音音效&#xff0c;包含沉稳的男声、温柔的女声、稚嫩的童声&#xff0c;还支持方言和外语配音&#xff0c;可以应用于多种场景&#xff0c;例如在线教育、广告宣传、电子书…

贡献超 10 万代码的新晋 committer,持续参与 Apache IoTDB 社区的“秘籍”是?

资深贡献者成为 Committer&#xff01; 2023 年 5 月 5 日&#xff0c;经 Apache IoTDB 社区投票&#xff0c;周沛辰成为 Apache IoTDB Committer。但其实这位新 committer 已经是 GitHub 代码贡献量突破 10 万&#xff0c;排名靠前的“资深贡献者”了。这位 Apache IoTDB 的“…

百度、NVIDIA、Intel……各大厂商集结,共话文心与飞桨共享生态下的大模型训推部署创新实践计划...

由深度学习技术及应用国家工程研究中心主办、百度飞桨和文心大模型承办的WAVE SUMMIT 2023峰会重磅来袭&#xff01;本届峰会聚焦AI技术、产业生态、未来趋势等主要方向&#xff0c;产、学、研、用各界大咖将围绕深度学习及大模型技术的发展与未来&#xff0c;带来行业前瞻洞察…

免费logo生成软件,总有一个适合你

随着互联网的发展&#xff0c;越来越多的企业开始注重品牌形象的塑造&#xff0c;而作为品牌形象的重要组成部分之一的logo也越来越受到关注。一个好的logo不仅可以传达企业的理念&#xff0c;还可以提升企业的知名度和美誉度。那么&#xff0c;在生成logo的过程中需要注意哪些…

Vue中使用qrcode说明

1.安装 npm i qrcode1.5.3 2.导入 import QRCode from qrcode 3.转换 说明&#xff1a;拿到服务器传来的字符串&#xff0c;转换成base64&#xff0c;然后通过img标签展示。 // 字符串转成二维码 let result await this.$API.reqPayInfo(this.orderId); 总结&#xff1a;

ChatGPT将会成为强者的外挂?—— 提高学习能力

目录 前言 一、提高学习力 &#x1f9d1;‍&#x1f4bb; 1. 快速找到需要的知识 2. 组合自己的知识体系 3. 内化知识技能 二、提问能力❗ 三、思维、创新能力 &#x1f31f; 1. 批判性思维 1.1 八大基本结构进行批判性提问 1.2 苏格拉底的提问分类方法 2. 结构化思…

Kubeflow Pipelines介绍与实例

1.背景 ML code仅是Machine Learning systems中的一小部分&#xff0c;像数据收集、特征抽取、配置管理、资源管理、模型部署、模型监控等同样十分的重要。一个典型的机器学习系统由这么多组件或子系统构成时&#xff0c;那么这么多子系统应该如何高效的配合起来&#xff1f; …

客户案例 | 永续发展,低代码助力“双碳”战略历史使命

关键发现 客户痛点&#xff1a;应对企业数字化转型&#xff0c;新技术能否提升绩效的不确定性&#xff0c;投资带来的风险性&#xff0c;以及企业组织架构的适应性等难点问题。作为业务驱动型企业&#xff0c;欠缺快速构建数字化产品方案的能力。 解决方案&#xff1a;利用西门…

【T3】固定资产模块点击资产增加时 提示“由于互斥功能正在运行或者相关设置步骤未完成,此功能暂时不可用”。

【问题描述】 在用友通T3软件中&#xff0c; 固定资产模块点击资产增加时 提示“由于互斥功能正在运行或者相关设置步骤未完成&#xff0c;此功能暂时不可用”。 【原因分析】 &#xff08;1&#xff09;可能之前出现过非正常关闭软件的行为导致功能被锁定 &#xff08;2&…

LC-1289. 下降路径最小和 II(记忆化搜索==> 动态规划)

1289. 下降路径最小和 II 难度困难108 给你一个 n x n 整数矩阵 grid &#xff0c;请你返回 非零偏移下降路径 数字和的最小值。 非零偏移下降路径 定义为&#xff1a;从 grid 数组中的每一行选择一个数字&#xff0c;且按顺序选出来的数字中&#xff0c;相邻数字不在原数组…

♥ vue中$set用法详细讲解

♥ vue中$set用法详细讲解 1、认识 在vue中&#xff0c;并不是任何时候数据都是双向绑定的。 官方文档介绍 使用场景 当数据没有被双向绑定的时候&#xff0c;我们就需要使用set了 举个例子&#xff1a; vue的data里边声明或者已经赋值过的对象或者数组&#xff08;数组里…

C#版本LINQ增强开源库

LINQ对应的中文名称是&#xff1a;语言集成查询&#xff0c;是对一系列直接将查询功能集成到C#语言技术的统称&#xff0c;我们最常用的场景是&#xff0c;用于数据库的查询功能。 在.Net中&#xff0c;本身对Objects也支持LINQ的扩展&#xff0c;但是对于一些特定的功能&…

Linux C 语言 mosquitto 方式 MQTT 发布消息

1 说明 采用 mosquitto 库&#xff0c;实现对主题发布消息。 其中服务器有做限制&#xff0c;需要对应的 cilent id &#xff0c;cafile 、certfile 、keyfile 等配置 2 开发环境 采用ubuntu 直接编译调试 安装mosquitto 库 sudo apt install libmosquitto-dev sudo apt-ge…