二叉树--递归和回溯

news2024/12/4 22:10:27

首先我们需要了解递归和回溯是什么意思

  1. 递归:

    • 定义: 递归是一种在算法或函数中调用自身的过程。递归通常用于解决可以被拆分成相似子问题的问题。在递归算法中,每一次递归调用都是对较小子问题的求解,直到达到某个终止条件,然后逐层返回结果。
    • 特点: 递归能够简化问题的表达,使得算法更加清晰和易于理解。在编写递归算法时,需要确保递归能够收敛到一个终止条件,否则可能导致无限递归。

    举例:计算阶乘是一个典型的递归问题。阶乘的递归定义为 n! = n * (n-1)!,并在 n = 0 时有基本情况 0! = 1

  2. 回溯:

    • 定义: 回溯是一种通过不断试探和撤销先前的选择来搜索解空间的算法。在解决问题时,回溯算法会尝试一条路径,如果发现这条路径不符合要求,就返回上一步(回溯),并尝试其他可能的路径,直到找到解或遍历完所有可能的选择。
    • 特点: 回溯通常用于解决那些可能有多个解,且需要尝试多个组合的问题。它是一种深度优先搜索的策略。

    举例:在解决八皇后问题时,回溯算法可以用于找到一个合法的棋盘布局,其中八个皇后互不攻击。

简单来说:

递归:就是从外层向底层走的过程

回溯:就是从底层向外走的过程

接下来通过两个例题来讲解递归和回溯这个知识。 

二叉树的最近公共祖先


236. 二叉树的最近公共祖先

先看这个题目,如果我们需要找到两个节点的最小公共父节点,肯定是要从叶子节点(最底层)开始来进行的,从底层开始向外走(回溯),看看左右子树分别是否存在p,q子节点。如果满足了左右子树中分别有p或q子节点,那这个节点就是最近的公共祖先。

class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root == null || root == p || root == q)  
            return root;
        TreeNode left = lowestCommonAncestor(root.left,p,q);//开始向下递归,到最后条件不符合的时候,开始回溯。
        TreeNode right = lowestCommonAncestor(root.right,p,q);//这里也是一样的
//到最后回溯的时候,其实是从最底层向外层慢慢走的
        if(left == null)    return right;
        if(right == null)   return left;
        return root;
    }
}

 

二叉树中最大路径和

124. 二叉树中的最大路径和

这个题目也是一样用递归,回溯进行的。先递归到最底层,然后向外走(回溯)。

题目思路:

  1. 定义递归函数: 设计一个递归函数,该函数的作用是计算包含当前节点的最大路径和。这个函数需要返回两个值:

    • 以当前节点为根的子树中的最大路径和。
    • 以当前节点为根的子树中,从当前节点出发向下走到任意节点的最大路径和。
  2. 递归计算: 对于每个节点,递归地计算其左右子树的最大路径和。然后,考虑三种情况:

    • 以当前节点为根的子树中的最大路径和(只包含当前节点)。
    • 左子树中从根节点向下走到任意节点的最大路径和。
    • 右子树中从根节点向下走到任意节点的最大路径和。
  3. 更新全局最大值: 在递归的过程中,维护一个全局变量,记录当前已经找到的最大路径和。

class Solution {
    int res = Integer.MIN_VALUE;
    int maxPath(TreeNode root){
        if(root == null)
            return 0;
        int left = Math.max(maxPath(root.left),0);
        int right = Math.max(maxPath(root.right),0);

        int priceNewNode = root.val+left+right;

        res = Math.max(res,price);

        return root.val + Math.max(left,right);
    }

    public int maxPathSum(TreeNode root) {
        maxPath(root);
        return res;
    }
}

 

根据这两个题目,我们已经可以了解了,什么是递归和回溯,怎么来实现了

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

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

相关文章

数据库实验一 数据表的创建与修改管理

数据库实验一、数据表的创建与修改管理实验 一、实验目的二、设计性实验三、观察与思考 一、实验目的 (1) 掌握表的基础知识。 (2) 掌握使用SQL语句创建表的方法。 (3) 掌握表的修改、查看、删除等基本操作方法。 (4) 掌握表中完整性约束的定义。 (5) 掌握完整性约束的作用 二…

AIGC 点亮创作之旅,「重内容」行业也能轻装出发

毋庸置疑,AIGC 的普及成为了内容产业的一束光。 不仅策划们可以从信息挖掘、素材调用、修改编辑等基础文案工作中解放出来,美术也成为 AIGC 的应用强项,基本的加文字、换背景、改尺寸、延展素材等,都能快速解决。 内容创作者们也因…

基于SpringBoot的图书管理系统

基于SpringBoot的图书管理系统 图书管理系统开发技术功能模块代码结构数据库设计运行截图源码获取 图书管理系统 开发技术 技术:SpringBoot、MyBatis-Plus、MySQL、Beetl、Layui。 框架:基于开源框架Snowy-Layui开发。 工具:IDEA、Navicat等…

基于骑手优化算法优化概率神经网络PNN的分类预测 - 附代码

基于骑手优化算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于骑手优化算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于骑手优化优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

2023年中国制服需求量、市场规模及行业细分需求现状分析[图]

制服是某一种行业为体现自己的行业特点,并有别于其他行业而特别设计的着装。它具有很明显的功能体现与形象体现的双重含义。这种职业装不仅具有识别的象征意义,还规范了人的行为并使之趋于文明化、秩序化。 职业制服市场可细分为国家统一着装部门&#x…

数字逻辑电路基础-时序逻辑电路之锁存器

文章目录 一、锁存器简介二、verilog源码三、综合及仿真结果一、锁存器简介 本文介绍数字逻辑电路中一种常用的基础时序逻辑电路-锁存,顾名思义,它的功能就是将输入在控制信号有效时透明传输到输出端,当控制信号无效时,输出值保持不变。它具有记忆和存储功能。这是它区别组…

风丘电动汽车热管理方案 为您的汽车研发保驾护航

热管理技术作为汽车节能、提高经济性和保障安全性的重要措施,在汽车研发过程中具有重要作用。传统燃油汽车的热管理系统主要包括发动机、变速器散热系统和汽车空调,而电动汽车的热管理系统在燃油汽车热管理架构的基础之上,又增加了电机电控热…

VSCode配置用户代码段以及常用快捷键汇总

一:前言 VSCode 是一款由微软开发的轻量级编辑器,可以安装插件和兼容多种语言。其本身已经是目前前端开发所使用的主流软件。那么在开发过程中,我们经常要写很多重复性的代码,比如当你去新建一个 .vue 页面的时候,往往…

一款好用的window ssh远程终端term工具

这是一款可以在window10上运行的ssh终端工具. 官方下载地址: https://github.com/kingToolbox/WindTerm/releases 具体页面如下 下载解压后: 把它移动到C目录下面,并且搞一个桌面快捷方式,就可以了

vLive虚拟直播2.6.5.1版本全新上线,四大实用功能抢鲜看!

vLive虚拟直播系统https://live.vsochina.com/cnvLive虚拟直播系统2.6.5.1版本全新上线,新版本中新增了四大实用功能!接下来小编将带你一同体验这些新功能。 1.支持带透明通道的信号源输入 新版本支持带透明通道的信号源输入,这意味着用户现…

垃圾收集器的种类及概述

1.JVM参数 1.1标准参数所有jdk版本通用参数 -version -help -server -cp 1.2-X参数 非标准参数,也就是在JDK各个版本中可能会变动 -Xint 解释执行 -Xcomp 第一次使用就编译成本地代码 -Xmixed 混合模式,JVM自己来决定 1.3 -XX参数 使用得最多…

visionOS空间计算实战开发教程Day 4 初识ImmersiveSpace

细心的读者会发现在在​​Day1​​​和​​Day2​​​的示例中我们使用的都是​​WindowGroup​​。 main struct visionOSDemoApp: App {var body: some Scene {WindowGroup {ContentView()}} } 本节我们来认识在visionOS开发中会经常用到的另一个概念​​ImmersiveSpace​​…

跑步耳机哪种好?运动耳机什么牌子好?无线运动耳机品牌排行

​运动健身已经成为当下最热门的运动健康项目,越来越多的人开始加入到这个行列中来。而在运动的过程中,佩戴一款适合自己的运动耳机听歌,不仅可以增加运动的乐趣,还能帮助我们更好地集中注意力,提高运动效果。然而&…

Talk | PSU助理教授吴清云:AutoGen-用多智能体对话开启下一代大型语言模型应用

本期为TechBeat人工智能社区第548期线上Talk! 北京时间11月21日(周二)20:00,宾夕法尼亚州立大学助理教授—吴清云的Talk已准时在TechBeat人工智能社区开播! 她与大家分享的主题是: “ AutoGen:用多智能体对话开启下一代大型语言模…

安卓毕业设计基于安卓android微信小程序的大学生心理测试系统

运行环境 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包&a…

7.5寸电子会议桌牌

银色外框设计,高端大气~ 超低功耗,常规使用寿命3-5年! 点阵电子纸屏幕,实现完全无纸化,循环使用,绿色环保! 四色/七色清晰显示,内容更丰富。 一次投入,省时省力更省事&#xff0…

2023年中国工业炉分类、产量及市场规模分析[图]

工业炉是指在工业生产中利用燃料燃烧或电能等转换产生的热量,将物料或工件进行熔炼、熔化、焙(煅)烧、加热、干馏、气化等的热工设备;广泛应用于机械、冶金、化工及陶瓷等国民经济的各行各业,具有生产效率高、产品质量…

开发上门按摩系统对技师如何管理,薪资结构怎么设计

开发完上门按摩系统平台上线之后,对技师的管理和薪资结构是非常重要的环节,关乎着平台的服务能力和服务质量,那么应该如何去管理和设计薪资结构呢 首先说技师管理: 一、培训和认证:平台应对技师进行全面的培训&#xf…

2023年中国感应电炉产业链、产量、销量及市场规模分析[图]

感应电炉行业定义是指使用电磁感应原理,通过感应电流使金属工件在短时间内达到预定温度的工业设备。广泛应用于冶金、机械、汽车、航空、航天、船舶、电子、医疗器械等领域。 感应电炉行业产业链 资料来源:共研产业咨询(共研网) …