二叉树删除结点思路分析及代码实现

037.二叉树的结点查找和结点删除 <!-- TOC --> <ul> <li><a href="#1-%E4%BA%8C%E5%8F%89%E6%A0%91%E6%9F%A5%E6%89%BE%E6%8C%87%E5%AE%9A%E 阅读详情

二叉树删除结点

思路分析

完成删除的操作

规定:

  1. 如果删除的结点是叶子节点,则删除该节点
  2. 如果删除的结点是非叶子节点,则删除该子树

思路:

  1. 因为我们的二叉树是单向的,所以我们是判断当前结点的子结点是否需要删除结点,而不能去判断当前这个结点是不是需要删除结点
  2. 如果当前结点的左子结点不为空,并且左子结点就是要删除结点,就将this.left=null;并且就返回(结束递归删除)
  3. 如果当前结点的右子结点不为空,并且右子结点就是要删除结点,就将this.right=null;并且就返回(结束递归删除)
  4. 如果第2和第3步没有删除结点,那么我们就需要向左子树进行递归删除
  5. 如果第4步也没有删除结点,则应当向右子树进行递归删除。
  6. 如果考虑树是空树root,如果只有一个root结点,则等价将二叉树置空

代码实现

删除方法delNode(int no):

// 递归删除结点
	// 1. 如果删除的结点是叶子节点,则删除该节点
	// 2. 如果删除的结点是非叶子节点,则删除该子树
	public void delNode(int no) {
		// 思路:
		// 1. 因为我们的二叉树是单向的,所以我们是判断当前结点的子结点是否需要删除结点,而不能去判断当前这个结点是不是需要删除结点
		// 2. 如果当前结点的左子结点不为空,并且左子结点就是要删除结点,就将this.left=null;并且就返回(结束递归删除)
		// 3. 如果当前结点的右子结点不为空,并且右子结点就是要删除结点,就将this.right=null;并且就返回(结束递归删除)
		// 4. 如果第2和第3步没有删除结点,那么我们就需要向左子树进行递归删除
		// 5. 如果第4步也没有删除结点,则应当向右子树进行递归删除。
		// 6. 如果考虑树是空树root,如果只有一个root结点,则等价将二叉树置空
		// 2. 如果当前结点的左子结点不为空,并且左子结点就是要删除结点,就将this.left=null;并且就返回(结束递归删除)
		if (this.left != null && this.left.no == no) {
			this.left = null;
			return;
		}
		// 3. 如果当前结点的右子结点不为空,并且右子结点就是要删除结点,就将this.right=null;并且就返回(结束递归删除)
		if (this.right != null && this.right.no == no) {
			this.right = null;
			return;
		}
		// 4.先左子树进行递归删除
		if (this.left != null) {
			this.left.delNode(no);
		//	return
		}
		// 5.向右子树递归删除
		if (this.right != null) {
			this.right.delNode(no);
		}
	}

delNode(int no)方法的实现:

//删除结点
	public void delNode(int no) {
		if (root!=null) {
			//如果只有一个root结点,立即判断root是不是要删除的结点
			if(root.getNo()==no) {
				root=null;
			}else {
				//递归删除
				root.delNode(no);
			}
		}else {
			System.out.println("空树,不能删除");
		}
	}
删除二叉树的某个结点源代码 这个是删除二叉树某个结点的源代码,可行。 立即下载

相关推荐

手把手教你用STM32实现三相永磁同步电机FOC控制(附代码)

本文详细介绍了基于STM32的三相永磁同步电机(PMSM)FOC控制实现方法,涵盖硬件设计、软件架构、参数调试及完整代码解析。通过磁场定向控制(FOC)算法,实现高效精准的电机控制,适用于工业自动化、电动汽车等领域。文章还提供了硬件选型建议、电流采样方案对比及PID参数整定技巧,助力开发者快速掌握FOC控制技术。

weixin_29168675的博客 94

二叉树删除节点(思路+代码实现)

二叉树的删除要考虑三种情况 1.删除的节点是叶子节点 2.删除的节点只有一个子树 3.删除的节点有两个子树 删除的节点是叶子节点 找到删除的叶子结点tNode 找到目标节点的父节点pNode(考虑是否有父节点) 找到删除节点是父节点的左子树还是右子树 根据前边情况进行删除 右子树:p.rc=null 左子树:p.lc=null 删除的节点只有一个子树 找到删除的叶子结点tNode 找到目标节点的父节点pNode(考虑是否有父节点) 找到删除节点是父节点的左子树还是右子树 确

m0_52012606的博客 3800

告别密码本!用Windows NPS给华为/华三交换机做Radius认证,SSH登录更安全

本文详细介绍了如何利用Windows NPS实现华为/华三交换机的Radius认证,提升SSH登录安全性。通过集中化管理、精细化控制和完整审计追踪,企业可告别传统密码本,大幅提升网络设备管理效率。文章包含NPS服务部署指南、交换机配置详解及调试技巧,助力企业构建安全高效的统一认证体系。

weixin_42549723的博客 418

数据结构笔记 —— 二叉树删除节点

本篇博客是根据b站尚硅谷的数据结构教程,学习后写的学习笔记,本篇博客的重点在自己编写的代码注释和过程分析上 https://www.bilibili.com/video/BV1E4411H73v?p=99 规定: (1)如果删除的节点是叶子节点,则删除该节点 (2)如果删除的节点是非叶子节点,则删除该子树 思路: 首先先处理:考虑如果树是空树,或者只有一个root节点,则等价于将二叉树置空 然后考虑其他的情况 因为我们的二叉树是单向的,所以我们是判断当前节点的子节点是否是需要删除的节点,而不能判断当前的这

一纸春秋的博客 3212

不带DDR的ZYNQ使用OCM加载程序运行的方法

软件版本:Vivado Vitis2019.2 第一步: 在Vivado的ZYNQ Block Design时候不配置DDR 第二步: 在Vitis中: 1、 在Vitis中新建Platform,选择xsa文件: 2、 在xparameters.h中添加DDR的地址空间定义,如下: 3、 修改链接文件,修改每个段都到ram_0,因为ram_1空间全部给到应用程序 4、 修改fsbl工程的main.c,增加XPAR_PS7_DDR_0条件编译 5、 修改fsbl.h,重定义DDR_EN

hpf247的博客 5532

2025年数学建模国赛高教社杯A题、B题、C题、D题、E题详细思路和代码 模型||插值与拟合

核心思想:构造一个精确通过所有已知离散数据点(xi, yi)的函数y = f(x),并以此函数来估算或预测未知点的值。基本假设:我们认为已知的数据点是100%精确、无误差的(或者误差可忽略不计),比如理论计算值、高精度仪器测量值等。我们的目标是“还原”或“重建”出点与点之间的真实函数关系。关键特征精确性:曲线或曲面必须穿过每一个样本点。局部性:插值结果严重依赖于局部数据点的分布和数值。用途:用于“补全”数据、填充缺失值、进行函数近似等。常见方法多项式插值:拉格朗日插值、牛顿插值。

2201_76125261的博客 802

二叉排序树(BST)删除结点算法详解之C语言版

在二叉排序树上删除某个结点,后的二叉树仍旧是一棵二叉排序树。 删除结点主要包含了以下四种情形: 1) 删除叶子结点 2) 删除只有左子树的结点 3) 删除只有右子树的结点 4) 删除左右子树均不空的结点** 针对第一种情形,直接删除树叶结点即可; 针对第二种情形,待删除结点的 左子树 树根替代待删除的结点即可; 针对第三种情形,待删除结点的 右子树 树根替代待删除的结点即可; 针对第四种情形,需要找到待删除结点的左子树最右侧的结点s,用其代替删除的结点即可。

sunnyoldboy博客 8543

微信小程序转发功能异常报错 由于小程序违规分享功能暂时无法使用的解决办法

小程序右上角转发功能被封,不代表你违规了,而可能是你没认证、没备案!很多功能都是“先合规、后开发”,踩坑就晚了,别像我一样绕了三圈才发现问题。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2603

二叉排序树的删除+图解

图解 第一种情况 第二种情况 第三种情况 代码实现 package com.atguigu.binarysorttree; import com.sun.javafx.sg.prism.NGImageView; import javafx.scene.transform.Rotate; import java.io.InputStream; import java.util.Timer; /** * @创建人 wdl * @创建时间 2021/3/29 * @描述 */ public

Frank---7的博客 5万+

Explorer.exe系统错误,电脑重启后刚开始一段时间正常,过一会桌面任务栏就卡死,可以打开任务管理器

联想E14Win10专业版。

本博客,博文仅代表个人操作经验,不能完全解决你的问题,仅供参考,佛系回复。 8048

【算法】克里金kriging参数值预测模型

模型中特征值2个,目标值1个,data数据集如图所示。搭建kriging参数值预测模型。

weixin_48618536的博客 5058

25.树:二叉树删除节点

删除叶子。

weixin_51437378的博客 891

dify制作的工作流如何通过API调用

本文介绍了如何通过Python程序调用Dify工作流API实现数据处理功能。文章详细展示了workflow和chatflow的调用方法,包括参数设置和结果输出,并提供了一个完整的API调用工具代码示例。该工具可实现文本处理、成果查重、关键词生成等功能,支持通过Python脚本或Postman进行调用。核心代码包含API请求函数和批量处理函数,通过HTTP请求与Dify服务端交互,实现自动化数据处理流程。

hhue2007的专栏 933

剑指offer(56~60)

删除链表中的重复结点 题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 思路分析: 首先添加一个头节点,以方便碰到第一个,第二个节点就相同的情况 设置 pre ,last 指针,pre指针指向当前确定不重复的那个节...

BGnv5 200

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

二叉搜索树详解(k,kv类型)

若它的左⼦树不为空,则左⼦树上所有结点的值都⼩于等于根结点的值。若它的右⼦树不为空,则右⼦树上所有结点的值都⼤于等于根结点的值。它的左右⼦树也分别为⼆叉搜索树。⼆叉搜索树中可以⽀持插⼊相等的值,也可以不⽀持插⼊相等的值,具体看使⽤场景定义,后续我 们学习map/set/multimap/multiset系列容器底层就是⼆叉搜索树,其中map/set不⽀持插⼊相等 值,multimap/multiset⽀持插⼊相等值。

许我一世白头的博客 857

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

已知二叉树以二叉链表存储,编写算法完成:对于树中每个元素值为x的结点,删去以它为根的子树,并释放相应的空间

已知二叉树以二叉链表存储,编写算法完成:对于树中每个元素值为x的结点,删去以它为根的子树,并释放相应的空间,感觉课后习题答案跟我的差别太大,于是拿出电脑上机运行一下,结果很满意!

qq_19262979的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

二叉树(前中后序三种遍历以及删除结点)

这篇文章对于二叉树的前中后序遍历做了详细介绍。

qq_54469537的博客 1407

55链表中环的入口结点--56删除链表中重复的结点--57二叉树的下一个结点

55链表中环的入口结点 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路分析:我们需要确定这个环的信息,但是我们只有链表头结点。 定义两个节点fast和slow,fast向后走两步,slow走一步,如果存在环,这两个结点会相遇,而且相遇的节点一定在环上。 如果存在环,fast和slow相遇之后,可以统计出环的节点数目count。 然后再让fast和slow从头结...

假正经Leo先生 615

彩笔学习笔记——java顺序二叉树的删除策略分析及代码实现

目录一、水话二、删除的策略分析三、辅助删除的一些方法代码:4个四、主体删除方法代码五、总结 一、水话 当一个白嫖党太久了,今儿写个作业,发现java顺序二叉树的删除的帖子不怎么多,于是乎打算自己也写一下。 二叉树的建立、遍历等暂且不论,直接搞上核心删除部分,但总感觉怪麻烦的,归根结底还是too vegetable,哎~~ 二、删除的策略分析 待删除结点cur的子树的数目 删除策略 ...

super_cup_d的博客 800

线索二叉树-删除结点

本文主要介绍了线索二叉树删除结点的操作,使用C/C++代码实现。

fcc13461862452的博客 636

二叉树删除结点

文章目录删除要求思路分析代码实现运行结果 删除要求 由于我现在所学习的二叉树并不是二叉有序树所以对二叉树的删除条件做了些变动: 如果删除的结点是叶子结点,则删除该结点 如果删除的结点是非叶子结点,则删除该子树 思路分析 1、如果该树只有一个根结点 那么将树置空 2、如果当前结点的左子结点不为空并且左子结点就是要删除的结点就将当前结点的左子结点置空并且返回结束递归 3、如果当前结点的右子结点不为空并且右子结点就是要删除的结点就将当前结点的右子结点置空并且返回结束递归 4、如果当前结点的左右子节点并不是要删

zt的博客 1318

二叉树删除结点和顺序存储二叉树

1.二叉树删除结点 2.顺序存储二叉树 二叉树删除结点其实是将我们要删除的节点与他的父节点没有联系也就是将父结点给要删除的结点位置置空。比如说root.left = null或者root.right = null;下面我们上代码进行分析先简单有一个思路 //下面为实体类里面的代码块 //二叉树删除结点 public void delNode(int no) { if ...

DeathRS的博客 651

二叉树题目:根到叶路径上的不足结点

文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析 题目 标题和出处 标题:根到叶路径上的不足结点 出处:1080. 根到叶路径上的不足结点 难度 6 级 题目描述 要求 给定二叉树的根结点 root\texttt{root}root 和整数 limit\texttt{limit}limit,同时删除树中的所有不足结点,然后返回结果二叉树的根结点。 如果经过一个结点的所有根到叶路径都满足路径上的结点值总和严格小于 limit\texttt{limit}limit,则该结点是不足结

stormsunshine的博客 954

二叉树之搜索二叉树、平衡二叉树、红黑树、B树思路及代码详解

本文从BST入手,随后从AVL到红黑树再到B树,层层深入。详细描述了代码本身的思路与实现过程。

m0_51150296的博客 2033

算法导论 之 平衡二叉树 - 删除 - 递归[C语言]

平衡二叉树 删除操作 C语言实现

做事先做人! 6908

二叉树删除指定节点

二叉树删除节点: 要求: 如果删除的节点是叶子结点,则删除该结点。 如果删除的节点是非叶子结点,则删除该子树。 思路: 首先处理根节点: 如果树是空树,

果车的博客 3684
上一篇: 哈希表思路分析及代码实现
下一篇: 顺序存储二叉树
lu_long
博客等级 码龄8年 11粉丝 43原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值