【LeetCode-中等题】236. 二叉树的最近公共祖先

news/2025/2/20 2:10:03/

文章目录

    • 题目
    • 方法一:后序遍历 + 回溯

题目

在这里插入图片描述

方法一:后序遍历 + 回溯

解题的核心就是:采用后序遍历

  1. 讨论p,q是否在当前的root的两边,如在两边则返回当前节点root

在这里插入图片描述

  1. 如何不在两边,只要出现一个节点等于p或者q就返回当前节点
    在这里插入图片描述
// 后序遍历  + 回溯public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root == null) return null;//即做节点判空条件、、也做递归出口 (说明递归到null  都没有找到  p或q)if(root == p || root == q)  return root;//  说明(当前要递归的节点就是p或q直接返回)或递归找到了p或q  就不用再往下递归了 结束此次递归  返回 p 或 qTreeNode left = lowestCommonAncestor(root.left,p,q);//递归左子树,返回值就是找到的p或q  没找到就是nullTreeNode right = lowestCommonAncestor(root.right,p,q);//递归右子树返回值就是找到的p或q  没找到就是nullif(left!=null  && right!=null) return root;// 如果遍历左右子树 在左子树或右子树找到了都找到了(  p  或  q  )//  说明当前结点就是  p  q  的最近公共祖先if(left != null && right == null) return left;//如果当前遍历左右子树结点只找到  一个 (q 或者 p)//说明下一个p或者q其实就是在这个结点下面 因为一旦找到了p 或q就不会往下遍历了,// 所以一旦出现只能找到一个(q  或  p)的情况 说明这个这个节点即是(p 或 q) 又是q 和 p 的最近公共祖先if(right != null && left==null) return right; return null;//所有都不满足直接返回null}

二叉树的最近公共祖先(DFS ,清晰图解)


http://www.ppmy.cn/news/1077926.html

相关文章

基于python的高校学生学业预警系统设计与实现

摘 要 计算机给人们带来的变化是非常明显的,在计算机的带动下,人们的日常生活出现了翻天覆地的变化。原本很多需要在线下进行操作的工作现如今都可以通过线上实现非常好的操作效果。并且借助于互联网技术的不断发展,人们现在信息交流的主要渠…

剑指Offer56-II.数组中数字出现的次数II C++

1、题目描述 在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。 示例 1: 输入:nums [3,4,3,3] 输出:4 示例 2: 输入:nums [9,1,7,9,7,9,7] 输出&#xf…

记录一下:基于nginx配置的封禁真实IP

nginx Situation(背景)Task(任务)Action(行动)1:方法1:使用nginx 自带的deny 和 allow 来实现2:方法2:添加配置 Result(结果) Situati…

工厂模式 与 抽象工厂模式 的区别

工厂模式: // 抽象产品接口 interface Product {void showInfo(); }// 具体产品A class ConcreteProductA implements Product {Overridepublic void showInfo() {System.out.println("This is Product A");} }// 具体产品B class ConcreteProductB impl…

QML Book 学习基础4(状态和转换)

目录 states(状态) Transition(过渡) states(状态) 用户界面的某些部分可以用状态来描述。状态定义一组属性更改,并且可以由特定条件触发。 QML 中定义状态,该元素需要绑定到任何项…

如何理解attention中的Q、K、V?

y直接用torch实现一个SelfAttention来说一说: 1、首先定义三哥线性变换,query,key以及value: class BertSelfAttention(nn.Module):self.query nn.Linear(config.hidden_size, self.all_head_size)#输入768,输出768…

Java设计模式:一、六大设计原则-04:迪米特法则

文章目录 一、定义:迪米特法则二、模拟场景:迪米特法则原则三、违背方案:迪米特法则原则3.1 工程结构3.2 学生、老师、校长类3.2.1 学生类3.2.2 老师类3.2.3 校长类 3.3 单元测试 四、改善代码:迪米特法则原则4.1 工程结构4.2 学生…

FIR滤波器算法

FIR(Finite Impulse Response)滤波器是一种基于有限长输入信号的数字滤波器,常用于去除数字信号中的噪声和干扰。其特点是具有线性相位响应,可以实现任意的频率响应和通带、阻带等设计参数。 FIR滤波器的数学模型描述如下&#x…