网站建设 网站开发 区别做网站开发需要什么技能

web/2025/9/30 18:53:31/文章来源:
网站建设 网站开发 区别,做网站开发需要什么技能,汇中建设 官方网站,低价网站设计2019独角兽企业重金招聘Python工程师标准 欢迎关注我的公众号“彤哥读源码”#xff0c;查看更多源码系列文章, 与彤哥一起畅游源码的海洋。 删除元素 删除元素本身比较简单#xff0c;就是采用二叉树的删除规则。 #xff08;1#xff09;如果删除的位置有两… 2019独角兽企业重金招聘Python工程师标准 欢迎关注我的公众号“彤哥读源码”查看更多源码系列文章, 与彤哥一起畅游源码的海洋。 删除元素 删除元素本身比较简单就是采用二叉树的删除规则。 1如果删除的位置有两个叶子节点则从其右子树中取最小的元素放到删除的位置然后把删除位置移到替代元素的位置进入下一步。 2如果删除的位置只有一个叶子节点有可能是经过第一步转换后的删除位置则把那个叶子节点作为替代元素放到删除的位置然后把这个叶子节点删除。 3如果删除的位置没有叶子节点则直接把这个删除位置的元素删除即可。 4针对红黑树如果删除位置是黑色节点还需要做再平衡。 5如果有替代元素则以替代元素作为当前节点进入再平衡。 6如果没有替代元素则以删除的位置的元素作为当前节点进入再平衡平衡之后再删除这个节点。 public V remove(Object key) {// 获取节点EntryK,V p getEntry(key);if (p null)return null;V oldValue p.value;// 删除节点deleteEntry(p);// 返回删除的valuereturn oldValue; }private void deleteEntry(EntryK,V p) {// 修改次数加1modCount;// 元素个数减1size--;if (p.left ! null p.right ! null) {// 如果当前节点既有左子节点又有右子节点// 取其右子树中最小的节点EntryK,V s successor(p);// 用右子树中最小节点的值替换当前节点的值p.key s.key;p.value s.value;// 把右子树中最小节点设为当前节点p s;// 这种情况实际上并没有删除p节点而是把p节点的值改了实际删除的是p的后继节点}// 如果原来的当前节点p有2个子节点则当前节点已经变成原来p的右子树中的最小节点了也就是说其没有左子节点了// 到这一步p肯定只有一个子节点了// 如果当前节点有子节点则用子节点替换当前节点EntryK,V replacement (p.left ! null ? p.left : p.right);if (replacement ! null) {// 把替换节点直接放到当前节点的位置上相当于删除了p并把替换节点移动过来了replacement.parent p.parent;if (p.parent null)root replacement;else if (p p.parent.left)p.parent.left replacement;elsep.parent.right replacement;// 将p的各项属性都设为空p.left p.right p.parent null;// 如果p是黑节点则需要再平衡if (p.color BLACK)fixAfterDeletion(replacement);} else if (p.parent null) {// 如果当前节点就是根节点则直接将根节点设为空即可root null;} else {// 如果当前节点没有子节点且其为黑节点则把自己当作虚拟的替换节点进行再平衡if (p.color BLACK)fixAfterDeletion(p);// 平衡完成后删除当前节点与父节点断绝关系if (p.parent ! null) {if (p p.parent.left)p.parent.left null;else if (p p.parent.right)p.parent.right null;p.parent null;}} }删除再平衡 经过上面的处理真正删除的肯定是黑色节点才会进入到再平衡阶段。 因为删除的是黑色节点导致整颗树不平衡了所以这里我们假设把删除的黑色赋予当前节点这样当前节点除了它自已的颜色还多了一个黑色那么 1如果当前节点是根节点则直接涂黑即可不需要再平衡 2如果当前节点是红黑节点则直接涂黑即可不需要平衡 3如果当前节点是黑黑节点则我们只要通过旋转把这个多出来的黑色不断的向上传递到一个红色节点即可这又可能会出现以下四种情况 假设当前节点为父节点的左子节点 情况策略1x是黑黑节点x的兄弟是红节点1将兄弟节点设为黑色br2将父节点设为红色br3以父节点为支点进行左旋br4重新设置x的兄弟节点进入下一步2x是黑黑节点x的兄弟是黑节点且兄弟节点的两个子节点都是黑色1将兄弟节点设置为红色br2将x的父节点作为新的当前节点进入下一次循环3x是黑黑节点x的兄弟是黑节点且兄弟节点的右子节点为黑色左子节点为红色1将兄弟节点的左子节点设为黑色br2将兄弟节点设为红色br3以兄弟节点为支点进行右旋br4重新设置x的兄弟节点进入下一步3x是黑黑节点x的兄弟是黑节点且兄弟节点的右子节点为红色左子节点任意颜色1将兄弟节点的颜色设为父节点的颜色br2将父节点设为黑色br3将兄弟节点的右子节点设为黑色br4以父节点为支点进行左旋br5将root作为新的当前节点退出循环假设当前节点为父节点的右子节点正好反过来 情况策略1x是黑黑节点x的兄弟是红节点1将兄弟节点设为黑色br2将父节点设为红色br3以父节点为支点进行右旋br4重新设置x的兄弟节点进入下一步2x是黑黑节点x的兄弟是黑节点且兄弟节点的两个子节点都是黑色1将兄弟节点设置为红色br2将x的父节点作为新的当前节点进入下一次循环3x是黑黑节点x的兄弟是黑节点且兄弟节点的左子节点为黑色右子节点为红色1将兄弟节点的右子节点设为黑色br2将兄弟节点设为红色br3以兄弟节点为支点进行左旋br4重新设置x的兄弟节点进入下一步3x是黑黑节点x的兄弟是黑节点且兄弟节点的左子节点为红色右子节点任意颜色1将兄弟节点的颜色设为父节点的颜色br2将父节点设为黑色br3将兄弟节点的左子节点设为黑色br4以父节点为支点进行右旋br5将root作为新的当前节点退出循环让我们来看看TreeMap中的实现 /*** 删除再平衡*1每个节点或者是黑色或者是红色。*2根节点是黑色。*3每个叶子节点NIL是黑色。注意这里叶子节点是指为空(NIL或NULL)的叶子节点*4如果一个节点是红色的则它的子节点必须是黑色的。*5从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。*/ private void fixAfterDeletion(EntryK,V x) {// 只有当前节点不是根节点且当前节点是黑色时才进入循环while (x ! root colorOf(x) BLACK) {if (x leftOf(parentOf(x))) {// 如果当前节点是其父节点的左子节点// sib是当前节点的兄弟节点EntryK,V sib rightOf(parentOf(x));// 情况1如果兄弟节点是红色if (colorOf(sib) RED) {// 1将兄弟节点设为黑色setColor(sib, BLACK);// 2将父节点设为红色setColor(parentOf(x), RED);// 3以父节点为支点进行左旋rotateLeft(parentOf(x));// 4重新设置x的兄弟节点进入下一步sib rightOf(parentOf(x));}if (colorOf(leftOf(sib)) BLACK colorOf(rightOf(sib)) BLACK) {// 情况2如果兄弟节点的两个子节点都是黑色// 1将兄弟节点设置为红色setColor(sib, RED);// 2将x的父节点作为新的当前节点进入下一次循环x parentOf(x);} else {if (colorOf(rightOf(sib)) BLACK) {// 情况3如果兄弟节点的右子节点为黑色// 1将兄弟节点的左子节点设为黑色setColor(leftOf(sib), BLACK);// 2将兄弟节点设为红色setColor(sib, RED);// 3以兄弟节点为支点进行右旋rotateRight(sib);// 4重新设置x的兄弟节点sib rightOf(parentOf(x));}// 情况4// 1将兄弟节点的颜色设为父节点的颜色setColor(sib, colorOf(parentOf(x)));// 2将父节点设为黑色setColor(parentOf(x), BLACK);// 3将兄弟节点的右子节点设为黑色setColor(rightOf(sib), BLACK);// 4以父节点为支点进行左旋rotateLeft(parentOf(x));// 5将root作为新的当前节点退出循环x root;}} else { // symmetric// 如果当前节点是其父节点的右子节点// sib是当前节点的兄弟节点EntryK,V sib leftOf(parentOf(x));// 情况1如果兄弟节点是红色if (colorOf(sib) RED) {// 1将兄弟节点设为黑色setColor(sib, BLACK);// 2将父节点设为红色setColor(parentOf(x), RED);// 3以父节点为支点进行右旋rotateRight(parentOf(x));// 4重新设置x的兄弟节点sib leftOf(parentOf(x));}if (colorOf(rightOf(sib)) BLACK colorOf(leftOf(sib)) BLACK) {// 情况2如果兄弟节点的两个子节点都是黑色// 1将兄弟节点设置为红色setColor(sib, RED);// 2将x的父节点作为新的当前节点进入下一次循环x parentOf(x);} else {if (colorOf(leftOf(sib)) BLACK) {// 情况3如果兄弟节点的左子节点为黑色// 1将兄弟节点的右子节点设为黑色setColor(rightOf(sib), BLACK);// 2将兄弟节点设为红色setColor(sib, RED);// 3以兄弟节点为支点进行左旋rotateLeft(sib);// 4重新设置x的兄弟节点sib leftOf(parentOf(x));}// 情况4// 1将兄弟节点的颜色设为父节点的颜色setColor(sib, colorOf(parentOf(x)));// 2将父节点设为黑色setColor(parentOf(x), BLACK);// 3将兄弟节点的左子节点设为黑色setColor(leftOf(sib), BLACK);// 4以父节点为支点进行右旋rotateRight(parentOf(x));// 5将root作为新的当前节点退出循环x root;}}}// 退出条件为多出来的黑色向上传递到了根节点或者红节点// 则将x设为黑色即可满足红黑树规则setColor(x, BLACK); }删除元素举例 假设我们有下面这样一颗红黑树。 我们删除6号元素则从右子树中找到了最小元素77又没有子节点了所以把7作为当前节点进行再平衡。 我们看到7是黑节点且其兄弟为黑节点且其兄弟的两个子节点都是红色满足情况4平衡之后如下图所示。 我们再删除7号元素则从右子树中找到了最小元素88有子节点且为黑色所以8的子节点9是替代节点以9为当前节点进行再平衡。 我们发现9是红节点则直接把它涂成黑色即满足了红黑树的特性不需要再过多的平衡了。 这次我们来个狠的把根节点删除从右子树中找到了最小的元素55没有子节点所以把5作为当前节点进行再平衡。 我们看到5是黑节点且其兄弟为红色符合情况1平衡之后如下图所示然后进入情况2。 对情况2进行再平衡后如下图所示。 然后进入下一次循环发现不符合循环条件了直接把x涂为黑色即可退出这个方法之后会把旧x删除掉见deleteEntry()方法最后的结果就是下面这样。 未完待续下一节我们一起探讨红黑树遍历元素的操作。 现在公众号文章没办法留言了如果有什么疑问或者建议请直接在公众号给我留言。 欢迎关注我的公众号“彤哥读源码”查看更多源码系列文章, 与彤哥一起畅游源码的海洋。 转载于:https://my.oschina.net/u/4108008/blog/3032739

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

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

相关文章

小企业网站 优帮云网站的设计与制作

目录 一、概述 二、持续集成的典型操作流程 2.1 概述 2.2 持续集成的操作流程图 2.3 持续集成关键流程说明 三、构建持续集成流水线的方式 3.1 依托云厂商能力 3.2 采用开源产品 3.3 企业自研 四、构建持续化集成流水线 4.1 基于GitHub的持续集成流水线(公…

江苏鑫圣建设工程有限公司网站营销公司排行

变量命名的规范,对于我们编程,大家都知道是非常重要的,上次给大家推荐过一个命名辅助工具《程序员还在为变量取名苦恼,那是因为你不知道,这个变量命名神器》,但大家一致反馈存在2个问题:1、网速…

台州网站平面设计做网站哪些方面会侵权

之前使用 html2canvas 和 jsPDF 实现html转pdf,但是客户说不能复制pdf中的文字,要改一下,先说不能复制的方法,再说可以复制的方法 一,html2canvas 和 jsPDF(图片插入pdf不可复制) 创建pdf.js文…

如何快速找到做网站的客户河北石家庄网络公司

目录 1.1 三张报表的作用 1.2 三张报表长的样子 1.2.1 资产负债表 1.2.2 利润表 1.2.3 现金流 1.3 BI指标构建 1.3.1 盈利能力指标构建 1.3.2 营运能力指标构建 1.3.3 偿债能力指标构建 转眼间,一年又悄然而逝,时光荏苒,岁月如梭 &a…

各类大型网站建设变身变装 wordpress

假如按工业交换机的端口号构造来分,工业交换机大概可分成:固定不动端口号工业交换机和模块化设计工业交换机二种不一样的构造。实际上也有一种是二者兼具,那便是在出示基础固定不动端口号的基本以上再配置一定的拓展扩展槽或控制模块。今天&a…

wordpress网站搬迁黄浦做网站

目录 1、简介 2、添加WS配置 3、发送请求 4、处理请求 5、常用模式和用例 6、自定义BodyReadables和BodyWritables 6、独立WS 7、访问AsyncHttpClient 8、配置WS 1、简介 有时我们想从一个play应用程序中调用其他HTTP服务。Play提供了WS库来进行异步HTTP方法调用。 …

上虞网站建设文广网络域名买卖网站

基本的XML Schema的使用就是这样,下面我们要介绍XML Schema的另外一个核心的部分也是Schema最关键的一个部分,就是关于Schema的名字空间(namespace)的问题。在上面关于XML Schema的介绍中,为了把读者集中到对XML Schema的语法理解上&#xff…

网站与网页的区别最新网站架构

小编杂谈新能源已经完成了至少5期的博文了,Boss告诉小编,如果还不介绍我们的产品和方案,黄花菜都凉了,所以小编这期博文就重点介绍一下Microchip在储能上的产品介绍,重点聊聊Microchip储能中使用的光伏逆变器的解决方案…

国外创意海报设计网站seo 网站标题长度

struts2 1-1:为什么每次请求都要创建一个Action对象? 是出于对线程安全的考虑,每个request都不会相互影响 1-2:ModelDriven拦截器的配置中refreshModelBeforeResult解决了什么问题? 先把旧的model对象从ValueStack…

缅甸网站后缀公司刚做网站在那里找图片做

我们经常在实际开发中会用到一些转换类,比如在金融界中,我们需要将1转换为“壹”,2转换成“贰”。还有类似这样的需求,食堂在一周内每天的菜单都是不一样的,周一为鱼香肉丝鸡腿,周二为爆炒土豆丝鲅鱼&#…

深圳定制网站制作报价北京网站建设推荐华网天下

C语言中文件定位函数主要是:fseek, ftell, fsetpos, fgetpos。 先来讲前两个函数,这是最基本的定位函数: fseek函数:能把文件指针移动到文件任何位置,其原型是:int fseek(FILE *fp, long offset, int fromw…

临沂制作手机网站怎样下载广安同城app

本文主要介绍如何在 GitHub Codespaces 这个云上 IDE 环境中安装 .NET 7背景GitHub 的 Codespaces 可以让我们随时随地编写代码,一些简单的修改也非常方便快捷。特别是 .NET 7 发布后,一些可以直接升级的小项目只需要更改配置就可以了,我们可…

大连网站推广工具杭州二建建设有限公司网站

​​题目来源: leetcode题目,网址:面试题 01.04. 回文排列 - 力扣(LeetCode) 解题思路: 对字符串中各字符计数,若个数为奇数的字符个数大于 1,则不是回文排列,否则是。 …

怎样通过网址浏览自己做的网站网站支付页面怎么做的

在 Java Web 应用中,高并发环境会带来一系列的挑战,这些挑战可能会影响应用的性能、稳定性和可用性。下面是一些常见的问题以及相应的解决方案: 1. 线程资源竞争 问题: 当多个线程尝试同时访问同一资源时,可能会导致竞争条件,进而影响数据的完整性。 解决方案: 使用同步…

经营网站挣钱深圳企业网查询

您可于2024年6月10日至14日前往美因河畔法兰克福11.0号馆,Softing将在C25展位展出,欢迎莅临! 作为工业应用中数据交换领域公认的专家,Softing工业致力于帮助各行各业的客户部署网络自动化和优化生产流程。 使用Softing产品&…

【转】网页 网站 html如何实现"关闭窗口"代码大全设计工作室取什么名字好

0x01 产品简介 金蝶 Apusic 应用服务器(Apusic Application Server,AAS)是一款标准、安全、高效、集成并具丰富功能的企业级应用服务器软件,全面支持 JakartaEE 8/9的技术规范,提供满足该规范的 Web 容器、 EJB 容器以及 WebService 容器等,支持 Websocket 1.1、Servlet…

卖产品怎么做网站用什么软件制作网站

对于Java程序员来说,null是令人头痛的东西。时常会受到空指针异常(NPE)的骚扰。连Java的发明者都承认这是他的一项巨大失误。那么,有什么办法可以避免在代码中写大量的判空语句呢?有人说可以使用 JDK8提供的 Optional …

考试类网站如何做中国质量建设协会网站

如果您是一位 C/C 开发人员,那么您一定知道在编写和维护大型项目时所面临的挑战。这些项目通常包含大量的源代码、库和依赖项,需要耗费大量的时间和精力才能构建和维护。在这种情况下,使用自动化工具可以大大减轻您的负担,提高项目…

网站开发的英文书有什么如何开一个自己的网站

文章目录题目描述思路 & 代码更新版题目描述 原地操作 & 减少操作次数:不能直接只拷非零数,也不要每次都一个个推动整个数组 思路 & 代码 维护一个noZeroNums,代表当前循环遇到的非0数的数量第一趟先不管0的数量,…

金融课程网站模板下载厦门网站到首页排名

zoo是时间序列的基础库,是面向通用的设计。 xts 是对时间序列库(zoo) 的一种扩展实现。xts 类型继承了zoo 类型,丰富了时间序列数据处理的函数。 一、xts对象的结构和定义 1、xts对象是一个具有时间索引的观测值矩阵,结构如下: xts matrix …