【二叉树学习7】

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

链接: link

思路

要找p,q的公共祖先,可以从下往上遍历二叉树,而二叉树的后序遍历是天然的从下往上遍历。这题采用的是递归的方法,递归结束条件就是root为null或者root=p或者root=q就结束递归。
然后说一下单层逻辑,当左右子树都不为空的时候,说明分别在左右子树找到了p和q,这个时候当前节点root就是最近的公共祖先;当左子树空、右子树不为空,则说明p,q出现在右子树,此时右子树的节点是最近的公共祖先;当左子树不为空、右子树为空同理;当左右子树都为空时,则说明二叉树中没有pq。

/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/
class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if (root == null || root == p || root == q)return root;// 遍历过程遇到p,q就结束递归TreeNode left = lowestCommonAncestor(root.left, p, q);TreeNode right = lowestCommonAncestor(root.right, p, q);if (left != null && right != null) {return root;} else if (left == null && right != null) {return right;} else if (left != null && right == null) {return left;} else {return null;}}
}

235.二叉搜索树的最近公共祖先
链接: link

/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if (root == null)return root;if (root.val > p.val && root.val > q.val) { // pq在root左侧return lowestCommonAncestor(root.left, p, q);} else if (root.val < p.val && root.val < q.val) {// pq在root右侧return lowestCommonAncestor(root.right, p, q);}else{return root;}}
}

701.二叉搜索树中的插入操作
链接: link

/*** 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 {public TreeNode insertIntoBST(TreeNode root, int val) {List<Integer> res = new ArrayList<>();inorder(root, res);// 直接将元素插入到已排序的数组中insertIntoSortedList(res, val);// 使用修改后的数组构建新树return buildTree(res, 0, res.size() - 1);}// 中序遍历void inorder(TreeNode root, List<Integer> res) {if (root == null) return;inorder(root.left, res);res.add(root.val);inorder(root.right, res);}// 在递增数组中插入元素void insertIntoSortedList(List<Integer> res, int val) {int left = 0, right = res.size() - 1;// 使用二分查找插入新元素while (left <= right) {int mid = left + (right - left) / 2;if (res.get(mid) == val) {return;  // 如果值已存在,则不插入} else if (res.get(mid) < val) {left = mid + 1;} else {right = mid - 1;}}// 在left位置插入新的元素res.add(left, val);}// 构建树private TreeNode buildTree(List<Integer> res, int left, int right) {if (left > right) {return null;}int mid = left + (right - left) / 2;  // 选择中间元素作为根节点TreeNode root = new TreeNode(res.get(mid));root.left = buildTree(res, left, mid - 1);  // 左子树root.right = buildTree(res, mid + 1, right); // 右子树return root;}
}

递归方法

class Solution {public TreeNode insertIntoBST(TreeNode root, int val) {if (root == null) // 如果当前节点为空,也就意味着val找到了合适的位置,此时创建节点直接返回。return new TreeNode(val);if (root.val < val){root.right = insertIntoBST(root.right, val); // 递归创建右子树}else if (root.val > val){root.left = insertIntoBST(root.left, val); // 递归创建左子树}return root;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity Shader编程】之顶点着色器

来一张AI提供的资料 在shader编程中&#xff0c;定义的结构体&#xff0c;有些是会被自动赋值&#xff0c;有些是必须要手动赋值的&#xff0c;这就涉及到了语义&#xff0c; 例如 struct appdata{float4 vertex : POSITION;float vertex2;float2 uv : TEXCOORD0;};结构体里面定…

数据结构与算法-栈

参考学习&#xff1a;B站-逊哥带你学编程 栈的定义与实现 补充&#xff1a; 栈是限制插入和删除操作只能在一个位置进行的表&#xff0c;该位置是表的末端&#xff0c;叫作栈顶(top)。 对栈的基本操作有进栈(push)和出栈(Pop)&#xff0c;前者相当于插入后者则是删除最后插入…

嵌入式硬件篇---OpenMV的硬件流和软件流

文章目录 前言一、硬件流控制&#xff08;Hardware Flow Control&#xff09;1. 基本原理RTSCTS 2. OpenMV中的实现• 硬件要求• 代码配置• 工作流程 二、软件流控制&#xff08;Software Flow Control&#xff09;1. 基本原理XONXOFF 2. OpenMV中的实现• 代码配置• 工作流…

MySQL Workbench菜单汉化为中文

默认情况下&#xff0c;安装完成的MySQL Workbench的菜单为英文&#xff0c;今天介绍一个简单易操作的方法&#xff0c;将MySQL Workbench菜单汉化为中文。 一、查找MySQL Workbench菜单标记文件main_menu.xml 1. 默认情况下&#xff0c;MySQL Workbench的安装路径为&#xff…

C++从入门到实战(四)C++引用与inline,nullptr

C从入门到实战&#xff08;四&#xff09;C引用与inline&#xff0c;nullptr 前言一、C 引用&#xff08;一&#xff09;什么是引用&#xff08;二&#xff09;引用的特点&#xff08;三&#xff09;引用作为函数参数&#xff08;四&#xff09;引用作为函数返回值&#xff08;…

【C/C++算法】从浅到深学习--- 二分查找(图文兼备 + 源码详解)

绪论&#xff1a;冲击蓝桥杯一起加油&#xff01;&#xff01; 每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论​&#xff1a; 本章是算法篇章的第三章二分算法&#xff0c;本章主要是通过题目的形式来进行学习&…

mysql之联合索引

文章目录 一&#xff1a;联合索引二&#xff1a;创建联合索引三&#xff1a;删除索引四&#xff1a;总结&#xff1a; 一&#xff1a;联合索引 联合索引又称组合索引或者复合索引&#xff0c;是建立在俩列或者多列以上的索引。 二&#xff1a;创建联合索引 语法&#xff1a…

51单片机09 DS1302时钟

测试一 测试代码&#xff1a;别忘了之前调整点阵的跳线 #include <STC89C5xRC.H> #include "LCD1602.h"void main() {LCD_Init();LCD_ShowString(1,1,"RTC");while(1){} } ------------------------------------ 测试二 DS1302.C #include &l…

【前端OCR】如何用paddlejs开发一个属于前端本地的OCR文本识别功能

之前出过一篇关于用tesseract纯前端实现文本识别功能的文档&#xff0c;经测试之后&#xff0c;用是能用&#xff0c;但识别准确率并不高&#xff0c;而且耗时也相对比较久。 于是又找了一个paddlejs做开发测试&#xff0c;但是整体上来说&#xff0c;其实两个差不多。而且初始…

Spring IoC的实现机制是什么?

大家好&#xff0c;我是锋哥。今天分享关于【Spring IoC的实现机制是什么&#xff1f;】面试题。希望对大家有帮助&#xff1b; Spring IoC的实现机制是什么&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring IoC&#xff08;Inversion of Control…

Web3 开发者周刊 36 | 构建自主未来:Agent、可扩展性与赏金

欢迎来到 Web3 开发者周刊 36&#xff0c;这里汇聚了赋能您的 Web3 构建之旅的各种资源。本周我们将剖析基于Agent的系统&#xff0c;讨论来自 Vitalik 关于以太坊 L1 和 L2 的最新思考&#xff0c;并提供最新高价值Bounty消息。 开始Build吧&#xff01; ✅ One Trillion Age…

网络安全-防御 第一次作业(由于防火墙只成功启动了一次未补截图)

防火墙安全策略课堂实验报告 一、拓扑 本实验拓扑包含预启动设备、DMZ区域&#xff08;含OA Server和Web Server&#xff09;、防火墙&#xff08;FW1&#xff09;、Trust区域&#xff08;含办公区PC和生产区PC&#xff09;等。具体IP地址及连接关系如给定拓扑图所示&#xf…

Vue.js 与低代码开发:如何实现快速应用构建

在当今数字化时代&#xff0c;企业对应用开发的效率要求越来越高。传统开发模式往往耗时费力&#xff0c;难以满足快速变化的市场需求。而 Vue.js 与低代码开发的结合&#xff0c;为快速构建应用提供了新的解决方案&#xff0c;让企业能够更敏捷地响应市场变化&#xff0c;抢占…

第39周:猫狗识别 2(Tensorflow实战第九周)

目录 前言 一、前期工作 1.1 设置GPU 1.2 导入数据 输出 二、数据预处理 2.1 加载数据 2.2 再次检查数据 2.3 配置数据集 2.4 可视化数据 三、构建VGG-16网络 3.1 VGG-16网络介绍 3.2 搭建VGG-16模型 四、编译 五、训练模型 5.1 上次程序的主要Bug 5.2 修改版…

朝天椒USB服务器解决前置机U盾虚拟机远程连接

本文探讨朝天椒USB服务器用Usb Over Network技术&#xff0c;解决前置机虚拟化部署后U盾的远程连接问题。 在金融、电信等关键行业&#xff0c;后台核心处理系统承担着至关重要的业务数据交互职责。为保障系统安全&#xff0c;这些单位要求企业通过前置机与他们的内网进行数据…

《刚刚问世》系列初窥篇-Java+Playwright自动化测试-23- 操作鼠标拖拽 - 番外篇(详细教程)

拉票 亲爱的小伙伴们或者童鞋们&#xff0c;喜欢宏哥文章的&#xff0c;请动动你们发财小手&#xff0c;给我投投票票 。 祝2025小伙伴们工作顺利&#xff0c;家庭和睦&#xff0c;心想事成&#xff0c;财源滚滚&#xff01; 我的票还有7票&#xff0c;互票的朋友私信给我。 投…

教程 | 从零部署到业务融合:DeepSeek R1 私有化部署实战指南

文章目录 1. 什么是 DeepSeek R1&#xff1f;a. 主要介绍a. 版本区别 2. 部署资源要求a. 硬件资源要求 3. 本地安装DeepSeek-R1a. 为什么选择本地部署&#xff1f;b. 部署工具对比c. 演示环境配置d. Ollama安装流程 4. 可视化工具a. 工具对比b. Open-WebUI部署 5. AI API应用a.…

学习总结2.14

深搜将题目分配&#xff0c;如果是两个题目&#xff0c;就可以出现左左&#xff0c;左右&#xff0c;右左&#xff0c;右右四种时间分配&#xff0c;再在其中找最小值&#xff0c;即是两脑共同处理的最小值 #include <stdio.h> int s[4]; int sum0; int brain[25][25]; …

Qt Creator 5.0.2 (Community)用久了突然变得很卡

目录 1.现象 2.解决方案 1.现象 很久没有用Qt Creator开发项目了&#xff0c;刚刚结束的项目又是用VS2019开发的&#xff1b;这两天刚好有时间去学习一下Qt&#xff0c;刚好要用Qt Creator&#xff0c;结果一打开就没反应&#xff0c;主界面显示出来要好几分钟&#xff0c;最…

DeepSeek的深度解析:由来、研发过程、公司背景、优势、劣势与总结

DeepSeek的由来 DeepSeek&#xff0c;中文名“深度求索”&#xff0c;是一个在人工智能领域崭露头角的创新项目。其英文名“DeepSeek”由“深思”&#xff08;Deep&#xff09;与“探索”&#xff08;Seek&#xff09;组合而成&#xff0c;寓意着凭借深度学习技术不断探索未知…