算法训练营day19,二叉树8-2

type TreeNode struct {

  Val   int

  Left  *TreeNode

  Right *TreeNode

}

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

/*本题比较难,删除节点要分五种情况考虑

1.没有找到要删除的节点

2.找到要删除的节点是叶子节点

3.找到要删除的节点,左指针不为空,右指针为空

4.找到要删除的节点,左指针为空,右指针不为空

5.找到要删除的节点,左指针不为空,右指针不为空,这种情况最复杂,需要调整二叉树结构,既可以让左子树继承,也可以让右子树继承

*/

//根据上述分析,第五点让右子树继承写法

func deleteNode(root *TreeNode, key int) *TreeNode {

//1.未找到要删除的节点

  if root == nil {

    return root

  }

  if root.Val == key {

      //2.找到要删除的节点是叶子节点

    if root.Right == nil && root.Left == nil {

      return nil

  // 3.找到要删除的节点,左指针不为空,右指针为空

    } else if root.Left != nil && root.Right == nil {

      return root.Left

//4.找到要删除的节点,左指针为空,右指针不为空

    } else if root.Left == nil && root.Right != nil {

      return root.Right

    } else {

     //5.找到要删除的节点,左指针不为空,右指针不为空,让右子树继承

      cur := root.Right

      for cur.Left != nil {

        cur = cur.Left

      }

      cur.Left = root.Left

      return root.Right

    }

 //因为是而二叉搜索树key比root值小,向左递归

  } else if key < root.Val {

    root.Left = deleteNode(root.Left, key)

//比root值大向右递归

  } else if key > root.Val {

    root.Right = deleteNode(root.Right, key)

  }

  return root

}

//第五点让左子树继承写法

func deleteNode(root *TreeNode, key int) *TreeNode {

  if root == nil {

    return root

  }

  if root.Val == key {

    if root.Right == nil && root.Left == nil {

      return nil

    } else if root.Left != nil && root.Right != nil {

      cur := root.Left

      for cur.Right != nil {

        cur = cur.Right

      }

      cur.Right = root.Right

      return root.Left

    } else if root.Left != nil {

      return root.Left

    } else {

      return root.Right

    }

  } else if key < root.Val {

    root.Left = deleteNode(root.Left, key)

  } else if key > root.Val {

    root.Right = deleteNode(root.Right, key)

  }

  return root

}

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

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

相关文章

[嵌入式系统-7]:龙芯1B 开发学习套件 -4- LoongIDE 集成开发工具的使用-创建应用程序工程、编译、下载、调试

目录 前言&#xff1a; 步骤1&#xff1a;设置工作工作空间 步骤2&#xff1a;设置工具链 步骤3&#xff1a;创建裸机应用程序 步骤4&#xff1a;创建带实时操作系统的应用程序 步骤5&#xff1a;编译 步骤6&#xff1a;下载调试 前言&#xff1a; LoongIDE集成开发环境…

使用 axios 请求库,设置请求拦截

什么是 axios&#xff1f; 基于promise网络请求库&#xff0c;可以同构&#xff08;同一套代码可以运行在浏览器&#xff09;&#xff0c;在服务端&#xff0c;使用原生node.js的http模块&#xff0c;在客户端&#xff08;浏览器&#xff09;中&#xff0c;使用XMLHttpRequests…

什么是适配器模式?它的实现方式有哪些?

什么是适配器模式&#xff1f;它的实现方式有哪些&#xff1f; 适配器模式是一种结构型设计模式&#xff0c;用于将一个类的接口转换成客户端所期望的另一个接口&#xff0c;以解决由于接口不兼容而不能协同工作的问题。适配器模式可以使原本由于接口不兼容而不能一起工作的类…

知识价值1-github站点域名

github如果访问不上&#xff0c;有一个办法是hosts映射&#xff1a; github.com x.x.x.x github.global.ssl.fastly.net y.y.y.y assets-cdn.github.com z.z.z.z1 assets-cdn.github.com z.z.z.z2 assets-cdn.github.com z.z.z.z3 assets-cdn.github.com z.z.z.z3 那这几个域名…

vue3开发,axios发送请求是携带params参数的避坑

vue3开发,axios发送请求是携带params参数的避坑&#xff01;今天一直报错&#xff0c;点击新增购物车&#xff0c;报错&#xff0c; 【Uncaught (in promise) TypeError: target must be an object】。查询了网上的资料说的都不对。都没有解决。最终还是被我整明白了。 网上网…

指针的深入理解(三)

这一节主要使用复习回调函数&#xff0c; 利用冒泡模拟实现qsort函数。 qsort 排序使用冒泡排序&#xff0c;主要难点在于运用元素个数和字节数以及基地址控制元素的比较&#xff1a; if里面使用了一个判断函数&#xff0c;qsort可以排序任意的数据&#xff0c;原因就是因为可…

[工具探索]Safari 和 Google Chrome 浏览器内核差异

最近有些Vue3的项目&#xff0c;使用了safari进行测试环境搞开发&#xff0c;发现页面存在不同程序的页面乱码情况&#xff0c;反而google浏览器没问题&#xff0c;下面我们就对比下他们之间的差异点&#xff1a; 日常开发google chrome占多数&#xff1b;现在主流浏览器 Goog…

oracle 监听的主机名出现异常时候,排查放向

oracle创建监听有多种方式&#xff1a; 1、手动编写$ORACLE_HOME/network/admin/listener.ora配置文件 2、通过netmgr或者netca创建 3、通过netca静默创建 当前环境是&#xff1a; 1、/etc/hosts文件中没有对主机名进行解析 2、在oracle的.bash_profile中增加了环境变量export…

机器学习-3降低损失(Reducing Loss)

机器学习-3降低损失(Reducing Loss) 学习内容来自&#xff1a;谷歌ai学习 https://developers.google.cn/machine-learning/crash-course/framing/check-your-understanding?hlzh-cn 本文作为学习记录1.降低损失&#xff1a;迭代方法 迭代学习 下图展示了机器学习算法用于训…

Flink实战五_状态机制

接上文&#xff1a;Flink实战四_TableAPI&SQL 在学习Flink的状态机制之前&#xff0c;我们需要理解什么是状态。回顾我们之前介绍的很多流计算的计算过程&#xff0c;有些计算方法&#xff0c;比如说我们之前多次使用的将stock.txt中的一行文本数据转换成Stock股票对象的ma…

python笔记11

1、模块简介 在Python中&#xff0c;模块是一种组织代码的方式&#xff0c;允许你将相关的代码放在一个文件中&#xff0c;以便更好地组织和重用。模块可以包含变量、函数和类等。下面是关于Python模块的一些基本概念&#xff1a; 1. 创建模块 要创建一个模块&#xff0c;只…

【DB2 流浪之旅】 第一讲 Linux 环境安装 db2 数据库

DB2数据库是IBM开发的一种大型关系型数据库平台。它支持多用户或应用程序在同一条SQL 语句中查询不同database甚至不同DBMS中的数据。一般DB2是搭配IBM Power系列小机使用的&#xff0c;兼容性好、性能高。当然DB2也有Linux版本的&#xff0c;相对性能会差一些&#xff0c;主要…

【FAS Survey】《Deep learning for face anti-spoofing: A Survey》

PAMI-2022 最新成果&#xff1a;https://github.com/ZitongYu/DeepFAS 文章目录 1 Introduction & Background1.1 Face Spoofing Attacks1.2 Datasets for Face Anti-Spoofing1.3 Evaluation Metrics1.4 Evaluation Protocols 2 Deep FAS with Commercial RGB Camera2.1 H…

CF1918 D. Blocking Elements [二分+数据结构优化dp]

传送门:CF [前题提要]:二分数据结构优化dp,赛时想到了二分,想到了dp,想到了应该是某种双log的做法,但是硬是想不出正确的dp的定义,看了讲解感觉dp方程的定义还是很典的,dp题写的少是这样的… 题目要求我们输出满足所有去掉的数字和以及区间段和的最大值的最小值.不难想到使用二…

meson、ninja编译dpdk

解压目录meson编译dpdk meson buildmeson编译dpdk debug版 meson setup --buildtypedebug debugbuildmeson编译使用静态库&#xff0c;编译example meson .. --prefix/usr/local --buildtypedebugoptimized --default-librarystatic -Dexamplesallninja编译 ninjaninja安装…

springboot-前后端分离——第二篇

本篇主要介绍一个发送请求的工具—postman&#xff0c;然后对请求中的参数进行介绍&#xff0c;例如简单参数、实体参数、数组参数、集合参数、日期类型参数以及json类型参数&#xff0c;对这些参数接收进行总结。最后对响应数据进行介绍&#xff0c;使用统一响应结果返回浏览器…

在JAVA中如何使用ASCLL码

在Java中&#xff0c;你可以直接使用ASCII码来表示和处理字符。ASCII&#xff08;American Standard Code for Information Interchange&#xff0c;美国信息交换标准代码&#xff09;是一种计算机编码系统&#xff0c;用于表示英文字符为数字。ASCII码使用7位或8位二进制数表示…

轮转数组[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个整数数组nums&#xff0c;将数组中的元素向右轮转k个位置&#xff0c;其中k是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,…

Golang k8s相关yaml包的区别

问题背景 大概是因为 k8s 定义了一些特殊的数据类型&#xff0c;所以 k8s 对象 yaml 序列化时与其它 yaml 包结果不同。 源代码 package mainimport ("log""os""github.com/ghodss/yaml"yamlv2 "gopkg.in/yaml.v2"yamlv3 "k8s…

八数码问题dfs

import java.util.*;public class Main{static String end "12345678x";public static void swap(char[] arr,int x,int y){char temp arr[x];arr[x] arr[y];arr[y] temp;}public static int bfs(String start){//key:String 存放12345678x这种格式的字符//value…