day22.二叉树part08

day22.二叉树part08

235.二叉搜索树的最近公共祖先

原题链接

代码随想录链接

思路:因为本题是二叉搜索树,利用它的特性可以从上往下进行递归遍历树,这里需要理解一点就是如果遍历到的一个节点发现该节点的值正好位于节点p和节点q的值中间,则证明找到了目标祖先。

java代码如下:

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root == null) return null;if(root.val > p.val && root.val > q.val){TreeNode node = lowestCommonAncestor(root.left,p,q);if(node != null){return node;}}if(root.val < p.val && root.val < q.val){TreeNode node = lowestCommonAncestor(root.right, p, q);if(node != null){return node;}}return root;}
}

701.二叉搜索树中的插入操作

原题链接

代码随想录链接

思路:这一题看上去很难对吧,因为题目说了可以任意重构二叉树,但是其实只要找到要插入的位置,把对应要插入的值放入空节点即可;

Java代码如下:

class Solution {public TreeNode insertIntoBST(TreeNode root, int val) {if(root == null){TreeNode node = new TreeNode(val);return node;}if(root.val > val) root.left = insertIntoBST(root.left,val);if(root.val < val) root.right = insertIntoBST(root.right,val);return root;}
}

450.删除二叉搜索树中的节点

原题链接

代码随想录链接

刚开始写的时候想到了当二叉树遍历到需要删除的节点时分了四种情况

  • 1.当该节点的左右子树都不为空,这种情况待会再说
  • 2.当该节点的左右子树都为空时,这时只需要返回一个空即可,因为要删除的节点对应的就是叶子结点;
  • 3.当该节点的左子树不为空、右子树为空时,直接返回该节点的左节点即可;
  • 4.当该节点的左子树为空,右子树不为空时,直接返回右节点即可;

这里再说第一种可能当左右子树都不为空时,如图,需要删除的是4节点:

在这里插入图片描述

这个时候将当前7节点定义为cur当前节点,然后一直向它的左子树遍历直到遍历到左边的叶子结点,也就是6这个节点,然后将当前节点的左子树指针指向4节点的左子树也就是3,然后把4节点的位置换成7节点即可,如下图:

在这里插入图片描述

Java代码如下:

class Solution {public TreeNode deleteNode(TreeNode root, int key) {if(root == null) return root;if(root.val == key){if(root.left != null && root.right != null){TreeNode node = root.right;while(node.left != null){node = node.left;}node.left = root.left;root = root.right;return root;}else if(root.left != null && root.right == null){return root.left;}else if(root.left == null && root.right != null){return root.right;}else{return null;}}if(root.val > key){root.left = deleteNode(root.left,key);}if(root.val < key){root.right = deleteNode(root.right,key);}return root;}
}
if(root.val < key){root.right = deleteNode(root.right,key);}return root;
}

}


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

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

相关文章

记录C++中,vector的迭代器在push_back以后扩容导致迭代器失效的问题

前言 vector是我们用到最多的数据结构&#xff0c;其底层数据结构是单端动态数组&#xff0c;由于数组的特点&#xff0c;vector也具有以下特性&#xff1a; ①O(1)时间的快速访问&#xff1b; ②顺序存储&#xff0c;所以插入到非尾结点位置所需时间复杂度为O(n)&#xff0c;删…

ARMv8-A架构下的外部debug模型(external debug)简介

Armv8-A external debug Armv8-A debug模型一&#xff0c;外部调试 External debug 简介二&#xff0c;Debug state2.1 Debug state的进入与退出 三&#xff0c;DAP&#xff0c;Debug Access Port3.1 EDSCR, External Debug Status and Control Register调试状态标识&#xff0…

小型分布式文件存储系统GoFastDfs应用简介

前言 最近稍微留意了一下各个文件存储系统的协议&#xff0c;发现minio是LGPLV3, 而fastdfs 是GPL3,这些协议其实对于商业应用是一个大坑。故而寻找一些代替品。 go-fastdfs就是其中之一&#xff0c;官网在&#xff1a; go-fastdfs 具体应用 其实可以直接查看官网教程的。 下…

代码随想录学习Day 21

回溯算法理论基础 回溯法又叫回溯搜索法。回溯是递归的副产品&#xff0c;有递归就会有回溯&#xff0c;回溯操作一般出现在递归函数的下面。回溯函数 递归函数。回溯法的本质是穷举。 回溯法解决的问题&#xff1a; 组合问题&#xff1a;N个数里面按一定规则找出k个数的集…

47 vue 常见的几种模型视图不同步的问题

前言 这里主要是来看一下 关于 vue 中的一些场景下面 可能会出现 模型和视图 不同步更新的情况 然后 这种情况主要是 vue 中的对象 属性没有响应式的 setter, getter 然后 我们这里就来看一下 大多数的情况下的一个场景, 和一些处理方式 当然 处理方式主要是基于 Vue.set, …

4t第14届省赛模拟1

俺服了&#xff0c;原来是\r\n写里边了....... 不过他都测55cm的超声波 是把距离测量值赋给距离参数&#xff0c;俺看反了&#xff0c;然后还加了一个标志位让超声波不进行读取然后显示距离参数值...... 好像用int和char没啥关系&#xff0c;就是后面强制类型转换串口显示都…

机器学习算法的另一个分支-贝叶斯算法原理(贝叶斯要解决什么问题)

目录 一、贝叶斯简介 二、贝叶斯要解决的问题 三、例子&#xff08;公式推导&#xff09; 四、实例 1. 拼写纠正实例 2. 垃圾邮件过滤实例 一、贝叶斯简介 1. 贝叶斯&#xff1a;英国数学家。1702年出生于伦敦&#xff0c;做过神甫。贝叶斯在数学方面主要研究概率论.对于…

『大模型笔记』提示工程、微调和RAG之间对比

提示工程、微调和RAG之间对比 文章目录 一. 提示工程、微调和RAG之间对比二. 参考文章文章:Prompt Engineering vs Finetuning vs RAG一. 提示工程、微调和RAG之间对比 Prompt EngineeringFinetuning

基于springboot的月子会所系统

摘 要 随着时代的进步&#xff0c;人们对生活的要求越来越高。月子基本是每一个生育期的母亲都要精力的一个特殊阶段&#xff0c;在中国人的传统观念中月子是一个非常重要的时期&#xff0c;只有在月子期间得到更好的照顾才能尽快的康复。传统的家庭一般都缺少月子期间对母婴照…

【干货分享】OpenHarmony轻量系统适配方案

1. 简介 本文在不改变原有系统基础框架的基础上&#xff0c; 介绍了一种OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;轻量系统适配方案。 本方案使用的是 OpenHarmony v3.2 Release版本源码。 2. 方案设计 本文使用的硬件模块的主要特性及功能如…

4/1 背刺!春招B站一面,这些问题你都会吗?

❝ 下面我将分享一位同学在Bilibili一面的面试经历&#xff0c;对于这次面试&#xff0c;他的评价是&#xff0c;「很有难度」&#xff0c;你试试呢&#xff1f; ❞ 【提醒】通过这次面试经验&#xff0c;你将可以复习到以下知识点&#xff0c;注意汇总&#xff0c;不超过10个 …

git的使用日常习惯规范与一些特殊操作

git的使用日常习惯规范与一些特殊操作 操作习惯规范创建本地新分支&#xff0c;推送新分支到云端仓库1.创建一个本地的login分支2.创建新分支后切换到新分支3.推送新分支到云端 git的特殊操作撤回commit&#xff08;取消提交到本地版本库的动作&#xff0c;本地工作区写的代码不…