【随想录】Day22—第六章 二叉树part08

ops/2024/9/24 7:25:11/

目录

  • 题目1: 二叉搜索树的最近公共祖先
    • 1- 思路
    • 2- 题解
      • ⭐ 二叉搜索树的最近公共祖先 ——题解思路
  • 题目2: 二叉搜索树中的插入操作
    • 1- 思路
    • 2- 题解
      • ⭐ 二叉搜索树中的插入操作 ——题解思路
  • 题目3: 删除二叉搜索树中的节点
    • 1- 思路
    • 2- 题解
      • ⭐ 删除二叉搜索树中的节点 ——题解思路


题目1: 二叉搜索树的最近公共祖先

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

1- 思路

与二叉树的最近公共祖先思路一致


2- 题解

⭐ 二叉搜索树的最近公共祖先 ——题解思路

在这里插入图片描述

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 && right!=null){return right;}else if(left != null && right==null){return left;}else if(left == null && right== null){return null;}else {return root;}}
}

题目2: 二叉搜索树中的插入操作

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

1- 思路

  • 二叉搜索树的插入,所有结点的插入位置在树的叶子结点上。
  • 因此添加节点不需要修改二叉搜索树的结构。

递归三部曲

  • 1. 递归函数参数及返回值
    • 参数为 对应的 root 和 val,返回值为 TreeNode:递归过程中遇到空向上一层返回当前递归的结果
  • 2. 终止条件 && 结果收集
    • 遇到 null 则证明递归找到了插入位置,因此 返回新建的结点
  • 3. 单层递归
    • 根据二叉搜索树的性质,当前元素若比 root.val 大则向右递归,若比 root.val 小则向左递归

2- 题解

⭐ 二叉搜索树中的插入操作 ——题解思路

在这里插入图片描述

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

题目3: 删除二叉搜索树中的节点

  • 题目链接:450. 删除二叉搜索树中的节点

1- 思路

删除结点有很多情况需要考虑

  • ① 没找到需要删除的结点
  • 找到删除结点
    • ② 找到删除结点为 叶子结点:左右都为空
    • ③ 需要删除的结点 非叶子结点:左不空 右为空 ——> 让当前结点的父节点指向当前节点的左节点
    • ④ 需要删除的结点 非叶子结点:左为空 右不空 ——> 让当前结点的父节点指向当前结点的右结点
    • ⑤ 🔑需要删除的结点 非叶子结点:_左不空 右不空 _——> 最复杂,如果删除当前结点,则当前结点的 左子树 拼接到 当前结点 的 右结点的最左下的结点左子树上

疑问

  • 如何同时操作当前结点,以及当前节点与父节点的关系?

递归三部曲

  • 2. 终止条件
    • 终止条件为找到被删除的节点,因此删除逻辑也在终止条件中

2- 题解

⭐ 删除二叉搜索树中的节点 ——题解思路

在这里插入图片描述

class Solution {public TreeNode deleteNode(TreeNode root, int key) {// 终止条件if(root==null){return null;}else if(root.val == key){// 四种情况if(root.left!= null && root.right==null){return root.left;}else if(root.left==null && root.right!=null){return root.right;}else if(root.left == null && root.right==null){return null;}else if(root.left!=null && root.right!=null){TreeNode cur = root.right;while(cur.left!=null){cur = cur.left;}cur.left = root.left;root = root.right;return root;}}if(key>root.val){root.right = deleteNode(root.right,key);}if(key<root.val){root.left = deleteNode(root.left,key);}return root;}
}


http://www.ppmy.cn/ops/8528.html

相关文章

vue2指令

vue2指令 v-model 的工作原理&#xff0c;它如何在表单输入和应用状态之间创建双向绑定 v-model 是 Vue 中一个特殊的指令&#xff0c;用于在表单 <input>、<textarea> 及 <select> 元素上创建双向数据绑定。它根据控件类型自动选取正确的方法来更新元素。…

【MySQL 数据宝典】【磁盘结构】- 001 表空间介绍优化建议

一、表空间介绍 InnoDB 其实是使用 页 为基本单位来管理存储空间的&#xff0c;默认的 页 大小为 16KB 。 对于 InnoDB 存储引擎来说&#xff0c;每个索引都对应着一棵 B 树&#xff0c;该 B 树的每个节点都是一个数据页&#xff0c;数据页之 间不必要是物理连续的&#xff0c…

相机1:如何系相机肩带

开始解锁新领域&#xff0c;多看几个相关视频&#xff0c;大概也就可以掌握一两种系相机肩带的方法&#xff0c;本质就是新知识的学习过程&#xff0c;不可能等着或者期待出来一个完整的教程&#xff0c;一步一步自己去探索&#xff0c;自己去查资料。 目录 总述 第一步&#…

【算法模版】基础算法

文章目录 快速排序算法模板归并排序算法模板整数二分算法模板浮点数二分算法模板高精度加法、减法、乘法、除法高精度加法高精度减法高精度乘低精度高精度除以低精度前缀和与差分一维前缀和二维前缀和一维差分二维差分位运算双指针算法离散化区间合并 快速排序算法模板 快速排…

vue3 uniapp微信登录

根据最新的微信小程序官方的规定&#xff0c;uniapp中的uni.getUserInfo方法不再返回用户头像和昵称、以及手机号 首先&#xff0c;需获取appID&#xff0c;appSecret&#xff0c;如下图 先调用uni.getUserInfo方法获取code&#xff0c;然后调用后台的api&#xff0c;传入code&…

世强硬创获昕感科技授权代理,SiC MOSFET实现超低导通电阻

近日&#xff0c;世强先进&#xff08;深圳&#xff09;科技股份有限公司&#xff08;下称“世强先进”&#xff09;获北京昕感科技有限责任公司&#xff08;下称“昕感科技”&#xff0c;英文名&#xff1a;NEXIC&#xff09;授权代理&#xff0c;为光伏、储能、电网、新能源汽…

ConstraintLayout父布局中RecycleView最后一个Item展示不全问题记录

随着ConstraintLayout用的越来越多&#xff0c;也发现了很多不可思议的事情&#xff0c;要多多注意&#xff0c;特此记录一下。 最近在一个项目中&#xff0c;用到RecycleView&#xff0c;父布局是 ConstraintLayout&#xff0c;很简单的布局&#xff0c;运行后&#xff0c;Re…

LeetCode-最大子数组和

每日一题 今天刷到的是一道利用动态规划解决的题目 题目要求 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-…