二叉排序树节点删除&简单性能分析

解决用加速器以后,电脑无法连接网络的问题 相信很多朋友也遇到过,用加速器以后,电脑网络直接断了,或者访问外网时打不开的情况解决办法是。 阅读详情

删除一棵平衡二叉树中的节点,有两种方法
第一种方法:
a.如果被删除的节点p没有左子树,则用p的右孩子代替p即可
b.否则,在p的左子树中找到关键字最大的节点r,将r的右指针指向p的右孩子,用p的左孩子代替p即可

//节点删除  方法1
bool CBTree::NodeDelete(node *&Node,int Data)
{
    node *p,*q;
    if(num==0||Node==NULL)
    {
        return false;
    }
    if(num==1)
    {
        delete Node;
        Node=NULL;
        num--;
        return true;
    }
    if(Node->data==Data)
    {
        if(Node->left)
        {
            p=Node->left;
            while(p->right)
            {
                p=p->right;         //左孩子中的最大节点
            }
            p->right=Node->right;
            q=Node->left;
            *Node=*Node->left;      
        }
        else
        {
            q=Node->right;
            *Node=*Node->right;         
        }
        delete q;
        num--;
        return true;
    }
    else if(Node->data>Data)
    {
        if(!Node->left->left&&!Node->left->right)   //叶子节点
        {
            if(Node->left->data==Data)
            {
                delete Node->left;
                num--;
                (*Node).left=NULL;
                return true;
            }
        }
        return NodeDelete(Node->left,Data);
    }
    else
    {
        if(!Node->right->left&&!Node->right->right) //叶子节点
        {
            if(Node->right->data==Data)
            {
                delete Node->right;
                num--;
                (*Node).right=NULL;
                return true;
            }
        }
        return NodeDelete(Node->right,Data);
    }
}

第二种方法:
a.如果被删除的节点p没有左子树,则用p的右孩子代替p即可
b.否则,在p的左子树中找到关键字最大的节点r,用r节点代替被删除的节点p,p原来的左右孩子不变,并且用原来r节点的孩子代替原来的r节点。

//节点删除  方法2
bool CBTree::DeleteNode(node *&Node,int Data)
{
    node *p,*q;
    if(num==0||Node==NULL)
    {
        return false;
    }
    if(num==1)
    {
        delete Node;
        Node=NULL;
        num--;
        return true;
    }
    if(Node->data==Data)
    {
        q=Node;
        if(Node->left)
        {
            p=Node->left;
            while(p->right)
            {   
                q=p;p=p->right;     //左孩子中的最大节点
            }   
            Node->data=p->data;     
            if(p->left)
            {
                q=p->left;*p=*p->left;
                delete q;
            }
            else
            {
                if(q==Node)         //最大节点是左节点
                    q->left=NULL;
                else
                    q->right=NULL;
                delete p;
            }
        }
        else
        {
            p=Node->right;
            *Node=*Node->right;
            delete p;
        }
        num--;
        return true;
    }
    else if(Node->data>Data)
    {
        if(!Node->left->left&&!Node->left->right)   //叶子节点
        {
            if(Node->left->data==Data)
            {
                delete Node->left;
                num--;
                (*Node).left=NULL;
                return true;
            }
        }
        return DeleteNode(Node->left,Data);
    }
    else
    {
        if(!Node->right->left&&!Node->right->right) //叶子节点
        {
            if(Node->right->data==Data)
            {
                delete Node->right;
                num--;
                (*Node).right=NULL;
                return true;
            }
        }
        return DeleteNode(Node->right,Data);
    }
}

二叉排序树性能分析:
当二叉排序树是完全二叉树时,其平均查找性能最佳为log2n,与有序表的折半查找性能相同。
当二叉排序树退化为一棵单支树时,二叉排序树的平均查找性能最差为(n+1)/2,与顺序表的平均查找长度相同。

从东南大学906被刷到调剂过程(内含个人感想) 介绍了自己在看到初试成绩,到后期复习以及调剂的全过程,当中也包含了自己的复试中的感想,希望大家理性看待。 阅读详情

相关推荐

带隙基准电路设计实战:从HSPICE仿真到Virtuoso版图全流程解析

在模拟集成电路设计中,基准电压源是确保系统精度与稳定性的核心模块。其基本原理在于巧妙结合具有正、负温度系数的电压,通过加权求和实现近似零温度系数的稳定输出,这一特性对于高精度数据转换器、电源管理芯片等至关重要。从工程实践角度,利用HSPICE进行深入的直流工作点、温度扫描和工艺角仿真,是验证电路性能、优化温度系数和电源抑制比的关键步骤。而借助Cadence Virtuoso进行版图实现时,必须重点关注电阻与BJT的匹配布局、敏感节点的保护以及电源完整性设计,以确保设计意图在硅片上得以准确呈现。通过完整的从前

weixin_29181861的博客 288

二叉排序树节点删除详解

摘要:本篇笔记作为补充笔记,主要讲解在二叉排序树中的节点删除这一行为的操作

云杉木屋 1万+

用deepseek部署全自动的机器人--bytebot

Bytebot是一款开源AI桌面代理,提供完整的虚拟桌面环境,支持跨应用任务处理、文件管理、文档处理等复杂工作流。其技术架构包含核心控制、LLM代理、UI等组件,支持Docker和Kubernetes部署。本文演示了基于CloudStudio的部署流程,包括环境配置、Docker部署及DeepSeek API集成,实现多模型调用功能。

Kin 2481

数据结构——二叉排序树的删除操作(非递归)

二叉排序树的删除操作

xinzhi1992的博客 5464

S32DS S32K312 LPSPI + DMA配置异步SPI

配置DMA->Specific Configuration->Dma Logic Channel->Configuration->Global。SpiPhyUnitMapping:将该配置Mapping到某一路Spi,此工程配置为Spi1,遂选择LPSPI_1。配置的该路SPI的片选ID,此处ID对应配置Pin脚时lpspi_pcs后的下表(本工程此处为PCS3)配置该路SPI对应的SPI硬件单元ID,本工程配置为Lpspi1,因此配置为CSIB1。首先配置SPI的Pin脚,此处使用的是LPSPI_1。

希望我的博客,能帮上你解决学习中工作中所遇到的问题 2365

28、基准剂量法:原理、应用与计算详解

本文详细介绍了基准剂量法(BMD)的原理、在监管机构中的应用以及具体的计算方法。内容涵盖样本量与BMD的关系、主要监管机构如EPA对BMD的应用、BMD的模型选择与数据拟合过程、拟合优度评估、下置信限(BMDL)计算,以及实验设计对BMD结果的影响。同时,还讨论了剂量指标和响应选择的关键问题,为理解和应用基准剂量法提供了全面的参考。

info6的博客 280

二叉排序树的删除+图解

图解 第一种情况 第二种情况 第三种情况 代码实现 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万+

ACS运动控制器编程 怎么学习

本文介绍了ACS运动控制器编程的完整学习路线,从零基础到实战应用。ACS是以色列高端多轴运动控制平台,适用于自动化设备、精密平台等项目。学习路径包括:1)安装官方软件SPiiPlusControlSuite;2)掌握轴、运动模式和指令三个核心概念;3)学习10个基础指令;4)编写首个运动程序;5)结合C#进行联合编程。进阶内容包括多轴同步、电子凸轮等工业应用,并推荐官方手册作为主要学习资源。通过7天的系统学习,即可掌握单轴运动控制,结合C#实现工业级设备开发。

StevenChen的博客 1332

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

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

sunnyoldboy博客 8547

078、镜头阴影校正:LSC算法原理与标定优化

文章摘要 镜头阴影校正(LSC)是手机影像系统中的关键技术,用于解决镜头渐晕效应导致的画面边缘暗角问题。本文详细分析了LSC算法的核心原理,包括非均匀网格划分、双线性插值等关键技术点,并揭示了标定流程中的常见陷阱(光源均匀性、灰卡反射特性、温度漂移)。文章还深入探讨了增益计算的工程实现细节,以及实际调优中的关键考量因素(色差校正、动态场景适应等)。作者结合15年经验,给出了包括验证方法、网格参数设计、产线标定等实用性建议,强调LSC算法应与光学设计协同优化,才能达到最佳效果。

sundong_81的博客 42

HINT: High-quality INpainting Transformer with Mask-Aware Encoding and Enhanced Attention 训练自己的数据集

HINT(高质量图像修复变换器)通过创新的掩码感知像素洗牌下采样模块(MPD)和空间激活通道注意力层(SCAL),显著提高了图像修复的质量,尤其在大面积缺失区域的情况下。实验表明,HINT在CelebA、CelebA-HQ、Places2和敦煌数据集上超越了现有的最先进模型,提升了图像的细节和结构一致性。

LJ1147517021的博客 313

二叉排序树的删除节点

步骤:首先,我们先从根节点开始查找到要删除的这个节点,然后删除该节点,然后再妥善安置该该节点的子树或子节点。 要删除的节点分为三种情况:1,当要删除的节点的是叶子结点的时候;2,当要删除的节点只有一个子节点或子树的时候;3,当要删除的节点同时有左右两棵子树的时候。 对于第一种情况,要删除的节点是叶子结点的时候,删除的办法是直接删除掉该节点即可; 对于第二种情况,要删除的节点有一个子节点或子树的时候,删除的办法是先将该节点删除,然后将它的子节点或子树直接挪到该节点的位置即可。 对于第三种情况,要...

Morning Sunshine的IT技术博客 5669

[Dify] 如何构建一个带评分功能的 Dify AI 教练系统

本文介绍如何利用Dify开源平台构建具备自动评分功能的AI教练系统。系统通过Prompt设计AI教练角色,使用OpenAPI定义评分工具接口,结合工作流编排实现提问、回答收集、评分和反馈的全流程。文章详细讲解了从AI教练身份设定、多维度评分标准设计到前端可视化展示的实现方法,并提供了可扩展建议,适用于语言训练、面试模拟等多种场景。该系统展示了Dify平台在构建智能化评估应用方面的优势,实现零代码开发专业AI教练解决方案。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 334

二叉排序树整理(创建,插入,查找,删除)

二叉排序树 查找表分为静态查找表和动态查找表,其中动态查找表的含义就是表结构本身是在查找过程中动态生成的。即若表中存在其关键字等于给定值keykeykey的记录,表明查找成功,否则插入关键字等于keykeykey的记录。 ​而动态查找表中最为典型的就是二叉排序树和哈希表,接下来重点对于二叉排序树的内容进行学习。 文章目录二叉排序树二叉排序树-定义二叉排序树-查找二叉排序树-插入二叉排序树-建立二叉排序树-遍历二叉排序树-删除二叉排序树-性能分析 二叉排序树-定义 ​ 空树或者是具有如下特性的二叉树被称为二叉

weixin_44267007的博客 9072

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

二叉排序树详解

前言博客编写人:Willam 博客编写时间:2017/3/25 博主邮箱:2930526477@qq.com(有志同道合之人,可以加qq交流交流编程心得)1、二叉排序树的介绍二叉排序树又称二叉查找树。二叉排序树有如下性质: 如果它的左子树不为空,那么左子树上的所有结点的值均小于它的根结点的值 如果它的右子树不为空,那么右子树上的左右结点的值均大于它的根结点的值 根结点的左子树和右子树又是二叉排序树。

William 3万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

数据结构-二叉排序树(BST树)

1,二叉排序树介绍 二叉排序树(Binary Sort Tree)或者是一颗空树;或者是具有如下性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树又分别为二叉排序树。 显然二叉排序树的定义是一个递归形式的定义,所以后面景禹要讲的插入、查找和删除都是基于递归的形式。特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点 1.1,二叉排序树的构建 假设我们有初始的无序...

理科男同学 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【数据结构】树(五)—— 二叉排序树(C语言版)

【数据结构】二叉排序树(C语言版)前言一、二叉排序树的定义二、二叉排序树的性质三、二叉排序树的操作二叉排序树常用存储结构二叉排序树的查找(递归实现)查找"二叉树T"中键值为 key 的节点(非递归实现)查找"二叉树T"中键值为 key 的节点二叉排序树的插入二叉排序树的创建二叉排序树的删除四、二叉树的查找性能分析应用区分:(与二分查找的应用区分)二叉排序树的构造树结构分析完整可运行代码 前言 二叉排序树(Binary Sort Tree,BST)又称为二叉查找树、二叉搜索树。与树型查找有关的结构有二叉排序树

haoweixl的博客 1万+

二叉排序树相关笔记

二叉排序树的基本概念和查找 定义:二叉排序树或者是一棵空树;或者是具有如下特性的二叉树: ①若它的左子树不空,则左子树上所有结点的值均小于根结点的值; ②若它的右子树不空,则右子树上所有结点的值均大于根结点的值; ③它的左、右子树也都分别是二叉排序树。 二叉排序树的定义是一个递归定义的过程。 保证小于根结点值的结点都落在左子树上,而大于根结点值的结点都落在右子树上。 查找步骤: ①若给定值等于根结点的关键字,则查找成功; ②若给定值小于根结点的关键字,则继续在左子树上进行查找; ③若给定值大于根结点的关键字

ChanCherry的博客 1001

二叉排序树的插入 java_Java实现二叉排序树的插入、查找、删除

import java.util.Random;/*** 二叉排序树(又称二叉查找树)* (1)能够是一颗空树* (2)若左子树不空,则左子树上全部的结点的值均小于她的根节点的值* (3)若右子树不空,则右子树上全部的结点的值均大于她的根节点的值* (4)左、右子树也分别为二叉排序树*** 性能分析:* 查找性能:* 含有n个结点的二叉排序树的平均查找长度和树的形态有关。* (最坏情况)当先后插入...

weixin_42144366的博客 597

二叉排序树的创建和遍历与删除指定的节点

二叉排序树(Binary Sort Tree)又称二叉查找树。 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; 二叉排序树性能分析 每个结点的C(i)为该结点的层次数。最坏情况下,当先后插入的关键字有序时,构成的二叉排

miao6664659的专栏 1224

二叉排序树

二叉排序树又称二叉查找树,它是一种对排序和查找都很有用的特殊二叉树。 定义:(1)若它的左子树不为空,则左子树上的所有结点的值均小于它的根结点的值;(2)若它的右子树不为空,则右子树上所有结点的值均小于它的根结点上的值;(3)它的左右子树本身也分别为二叉排序树。通过中序排列我们发现中序遍历的结果是结点的值是由低到高的。二叉排序树的二叉链表存储表示typedef struct{ keyType k

小王的技术窝 2800

[c++]二叉排序树(Binary Sort Tree)详解

二叉树是一种很基础的数据结构,而二叉排序树则是一种插入,删除,查找效率都不错的一种数据结构。二叉排序树的特性就是左子树键值小于根,右子树键值大于根,所以二叉排序树就天然的具有查找功能,有时二叉排序树又叫二叉搜索树或者二叉查找树。

EQUINOX1的博客 1256

Java实现二叉排序树的插入、查找、删除

import java.util.Random; /** * 二叉排序树(又称二叉查找树) * (1)可以是一颗空树 * (2)若左子树不空,则左子树上所有的结点的值均小于她的根节点的值 * (3)若右子树不空,则右子树上所有的结点的值均大于她的根节点的值 * (4)左、右子树也分别为二叉排序树 * * * 性能分析: * 查找性能: * 含有

奋斗的小菜鸟 6572

C++学习记录(13)二叉排序树

简单回顾一下二叉树。硬说的话我们其实学习的只有堆和普通的二叉树。其中堆的逻辑结构是完全二叉树,物理结构底层其实是顺序存储,一般直接就用数组代替了;普通二叉树我们学习的重点其实就是大概了解名词、了解结构、前中后序、层序遍历等。其实大部分都是以二叉树的结构为主,但是实际上搞个普通二叉树有什么用呢?

2401_85751795的博客 1056

【数据结构】五、树:5.二叉排序树BST

1.二叉排序树BST 1.1定义 1.2存储结构 1.3查找 1.3.1查找最大和最小元素 1.4插入 1.4.1插入构造二叉排序树 1.5删除 1.6性能分析

关注:https://github.com/Suhan42 960

折半查找和二叉排序树

1.折半查找和二叉排序树的时间性能分析: 从查找过程看,二叉排序树与二分查找相似。就平均时间性能而言,二叉排序树上的查找和二分查找差不多,但不完全一致; 折半查找的性能分析可以用二叉判定树来衡量,平均查找长度和最大查找长度都是O(logn); 二叉排序树的查找性能与数据的输入顺序有关,最好情况下的平均查找长度与折半查找相同,但最坏情况时,即形成单支树时,其查找长度为O(n)。 折半查找的...

tristacrystal的博客 2万+
上一篇: 二叉树层序遍历
下一篇: JS自动识别浏览器
Monkey_Coder
博客等级 码龄11年 3粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值