时间:2015-07-06 来源:

Java实现二叉搜索树节点的删除 【系统运维】

前言:

之前写过一篇关于二叉搜索树的博客:Java对二叉搜索树进行插入、查找、遍历、最大值和最小值的操作

1)后继节点是delNode的右子节点

3、把current从它父节点的rightChild(或leftChild)字段移除网页外包接活,把这个字段置为successor

1、把后继父节点的leftChild字段设置为successor的右子节点

(1)若左子树不空,网页外包接活则左子树上所有结点的值均小于它的根结点的值;

首先,网页切图价格程序找到初始节点的右子节点,div+css制作然后到这个左子节点的左子节点,兼职手机网页制作以此类推,html静态页面制作顺着左子节点路径一直向下找.这个路径上的最后一个左子节点就是初始节点的后继.

如果要删除的节点有两个子节点,web切图报价就不能只是用它的一个子节点代替它.

public boolean delete(int key) { // 假设树非空 Node current = root; Node parent = root; boolean isLeftChild = true; while(current.iData != key) { parent = current; if(key < current.iData) { isLeftChild = true; current = current.leftChild; } else { isLeftChild = false; current = current.rightChild; } if(current == null) return false; } // end while if(current.leftChild == null && current.rightChild == null) { // 表示要删除的节点是叶子节点,psd转html没有左右孩子 if(current == root) root =null; else if(isLeftChild) // 表示要删除的节点是左叶子节点 parent.leftChild = null; else // 表示要删除的节点是右叶子节点 parent.rightChild = null; } else if(current.rightChild == null) { // 表示要删除的节点只有左孩子 if(current == root) root = current.leftChild; else if(isLeftChild) // 表示要删除的结点是左子节点 parent.leftChild = current.leftChild; else // 表示要删除的结点是右子节点 parent.rightChild = current.leftChild; } else if(current.leftChild == null) { // 表示要删除的节点只有右孩子 if(current == root) root = current.rightChild; else if(isLeftChild) // 表示要删除的结点是右子节点 parent.leftChild = current.rightChild; else // 表示要删除的结点是右子节点 parent.rightChild = current.rightChild; } else { Node successor =getSuccessor(current); if(current == root) root =successor; else if(isLeftChild) parent.leftChild = successor; // 把current从它父节点的leftChild字段移除,html切图制作把这个字段置为successor else parent.rightChild = successor; // 把current从它父节点的rightChild字段移除网页外包接活,把这个字段置为successor successor.leftChild = current.leftChild; // 把current的左子节点从current移除,网页外包接活successor的左子节点指向的位置设为current的左子节点 } return true; } // delete end

以下是delete方法里面的完整代码:

版权声明:本文为博主原创文章web前端制作,未经博主允许不得转载.

首先找到要删除的节点,web前端制作如果找到节点了承接网页制作,就从while循环中跳出,div前端切图parent保存要删除的节点;如果找不到要删除的节点web切图报价,代码

下面是查找后继节点的代码:

if(current.leftChild == null && current.rightChild == null) { // 表示要删除的节点是叶子节点符合w3c标准,没有左右孩子 if(current == root) root =null; else if(isLeftChild) // 表示要删除的节点是左叶子节点 parent.leftChild = null; else // 表示要删除的节点是右叶子节点 parent.rightChild = null; } 情况2:删除有一个子节点的节点

这个节点只有两个连接:连向父节点的和连向它唯一的子节点的.需要从这个序列中“剪断”这个节点,符合w3c标准把它的子节点直接连到它的父节点上.这个过程要求改变父节点适当的引用(左子节点还是右子节点),指向要删除节点的子节点.

2、把current的左子节点移出来,jpg或psd转html把它插到后继的leftChild字段

        要删除叶节点web前端制作,由指向该节点改为null就可以了承接网页制作,要删除的节点仍然存在,兼职手机网页制作但它已经不是树的一部分了.

如下:

else { Node successor =getSuccessor(current); if(current == root) root =successor; else if(isLeftChild) parent.leftChild = successor; // 把current从它父节点的leftChild字段移除web切图报价,把这个字段置为successor else parent.rightChild = successor; // 把current从它父节点的rightChild字段移除,网站div+css把这个字段置为successor successor.leftChild = current.leftChild; // 把current的左子节点从current移除符合w3c标准,successor的左子节点指向的位置设为current的左子节点 }

2 该节点有一个子节点

private Node getSuccessor(Node delNode) { Node successorParent = delNode; Node successor = delNode; Node current = delNode.rightChild; while(current != null) { successorParent = successor; successor = current; current = current.leftChild; } if(successor != delNode.rightChild) { // 如果后继节点是delNode右子节点的左后代 successorParent.leftChild = successor.rightChild; // 把后继父节点的leftChild字段设置为successor的右子节点 successor.rightChild = delNode.rightChild; // 把successor的rightChild字段置为要删除节点的右子节点 } return successor; } 后继节点可能与current有两种位置关系,符合w3c标准current就是要删除的节点.后继可能是current的右子节点网页外包接活,或者可能是current右子节点的左子孙节点.

这次我想分享的是二叉搜索树中节点是如何删除的,网页外包接活删除节点是二叉搜索树常用的一般操作中最复杂的web前端制作,找到节点后承接网页制作,把这个字段指向后继

因此需要另一种方法:删除有两个子节点的节点web切图报价,用它的中序后继来代替该节点(对每一个节点来说,web切图报价比该节点的关键字值次高的节点是它的中序后继).

3 该节点有两个子节点

因为Java语言有垃圾自动收集的机制符合w3c标准,所以不需要非得把节点本身给删除.一旦Java意识到程序不再与这个节点有关联,html切图制作就会自动把它清理出存储器.

1 该节点是叶节点(没有子节点)

情况1:删除没有子节点的节点

// 假设树非空 Node current = root; Node parent = root; boolean isLeftChild = true; while(current.iData != key) { parent = current; if(key < current.iData) { isLeftChild = true; current = current.leftChild; } else { isLeftChild = false; current = current.rightChild; } if(current == null) return false; } // end while 找到节点后网页外包接活,先要检查它是不是真的没有子节点.如果它没有子节点,网页外包接活还需要检查它是不是根.如果它是根的话web前端制作,只需要把它置为null;这样就清空了树.否则,web前端制作就把父节点的leftChild或rightChild字段置为null,断开父节点和那个要删除节点的连接.

所以我们的第一步是查找后继节点:

(3)左、右子树也分别为二叉排序树;

如果初始节点的右子节点没有左子节点,div前端切图那么这个右子节点本身就是后继.

(2)若右子树不空web切图报价,则右子树上所有结点的值均大于它的根结点的值;

如果successor是要删除节点左子节点的左后代,web切图报价执行删除操作需要以下四个步骤:

只需两个步骤:

如图:

parent.rightChild = successor; // 把current从它父节点的rightChild字段移除符合w3c标准,把这个字段置为successor successor.leftChild = current.leftChild; // 把current的左子节点从current移除,符合w3c标准successor的左子节点指向的位置设为current的左子节点 2)后继节点是delNode右子节点的左后代

4、把current的左子节点从current移除网页外包接活,successor的左子节点指向的位置设为current的左子节点

else if(current.rightChild == null) { // 表示要删除的节点只有左孩子 if(current == root) root = current.leftChild; else if(isLeftChild) // 表示要删除的结点是左子节点 parent.leftChild = current.leftChild; else // 表示要删除的结点是右子节点 parent.rightChild = current.leftChild; } else if(current.leftChild == null) { // 表示要删除的节点只有右孩子 if(current == root) root = current.rightChild; else if(isLeftChild) // 表示要删除的结点是右子节点 parent.leftChild = current.rightChild; else // 表示要删除的结点是右子节点 parent.rightChild = current.rightChild; } 情况 3:删除有两个子节点的节点

下面的代码用来处理有一个子节点的节点情况.有四种不同的情况:要删除节点的子节点可能有左子节点或右子节点,jpg或psd转html并且每种情况中的要删除节点也可能是自己父节点的左子节点和右子节点.

2、把successor的rightChild字段置为要删除节点的右子节点

 二叉查找树重要性质:

点击次数:5890
作者:
web前端行业资讯
Web new NewsList
谷歌发布Tacotron2:能更简单地训练AI学习演讲 ,,2017年12月21日TensorFlow漏洞爆发背后:关于AI安全我们的傻与天真 ,,2017年12月21日Android端Edge浏览器新版发布:常规性能优化和BUG修复 ,,2017年12月21日三星开发出全球最小的DRAM芯片技术领先优势扩大 ,,2017年12月21日腾讯绝艺AI下一步将学习AlphaGozero自对弈训练 ,,2017年12月21日Facebook社交VR应用Spaces扩大覆盖面:入驻HTCVive ,,2017年12月21日设计图曝光:三星双屏折叠手机原来是这样的 ,,2017年12月21日微信支付和支付宝已成为世界移动支付的"老师" ,,2017年12月21日新专利表明FaceID未来有望装备在iPad、MacBook和iMac等设备 ,,2017年12月21日首批九个建议加入EE4J的项目 ,,2017年12月21日这就是SurfacePhone?微软可折叠手机概念图曝光 ,,2017年12月21日继“Angel”开源后,腾讯又开放TDinsight机器学习平台 ,,2017年12月21日谷歌母公司研发“闪光”网络技术无需铺设线缆 ,,2017年12月21日微软投资5千万美元利用人工智能对抗气候变化 ,,2017年12月21日谷歌中国2017:面向开发者的1年AI先行的1年 ,,2017年12月21日GreenKey加入Symphony软件基金会,将开源语音软件 ,,2017年12月21日腾讯发现者揭秘:怎么应对TensorFlow的安全风险,修复有多难 ,,2017年12月21日清华新成立两大交叉研究机构探索智能与未来 ,,2017年12月21日微软将AI融入生产力工具和搜索引擎与其它巨头竞争 ,,2017年12月21日Gfycat将利用机器学习技术创建高分辨率GIF动图 ,,2017年12月21日安全软件公司Avast开源化机器码反编译器RetDec ,,2017年12月21日谷歌开源TFGAN,让训练和评估GAN变得更加简单 ,,2017年12月21日社区对模块化不感兴趣时隔三周经典版FedoraServer27发布 ,,2017年12月21日Windows10加入OpenSSH客户端 ,,2017年12月21日FirefoxQuantum发布一个月安装量1.7亿 ,,2017年12月21日吴恩达宣布创业新项目已与富士康达成战略合作 ,,2017年12月21日Scala入门系列(十二):隐式转换2017年12月20日speedment入门教程2017年12月20日SLAM入门笔记(1):特征点的匹配2017年12月20日深入浅出了解frame和bounds2017年12月20日分布式消息系统Jafka ,,2016年07月24日再谈JVM类加载机制 【综合】2015年03月24日【图形学】我理解的伽马校正(GammaCorrection) 【研发管理】2015年06月01日HDU2099 【编程语言】2015年05月29日第3周项目2-三角形类2 【编程语言】2015年03月24日Hadoop读书笔记(十)MapReduce中的从计数器理解combiner归约 【云计算】2014年12月03日shell监控linux系统进程创建脚本分享2014年01月29日前端工程师应该对HTTP了解到什么程度?从哪些途径去熟悉更好? 【编程语言】2015年03月16日javascript正则表达式基础篇2014年01月29日Java的TreeMap统计单词数量 【互联网】2015年08月14日李振杰:Windows10之后的微软该怎么活? 【综合】2015年05月12日HDU-1247Hat’sWords(字典树)【综合】2015年04月03日apacheurlrewrite防盗链功能配置2014年01月30日android自定义View之自定义可置顶ScrollView,View滑动原理简析 【编程语言】2015年04月01日图解MongoDB原理(二) 【综合】2014年12月16日淘宝产品描述页页面框架分解2014年01月28日O-C-11-利用类方法做一个简单的计算器【编程语言】2015年08月14日atitit.GUI图片非规则按钮跟动态图片切换的实现模式总结java.netc#c++webhtmljs【综合】2014年12月19日Android_View_View绘制流程【数据库】2015年04月03日C#语法糖,甜过初恋 【编程语言】2015年08月03日Service初步认识【移动开发】2014年12月18日原生Gmail应用即将登陆iOS? ,,2016年07月24日兰州烧饼【编程语言】2015年01月19日Oracle12cClusterHealthMonitor详解【编程语言】2014年12月16日【Android文档】Training-------AddingtheActionBar 【互联网】2015年03月11日7个基于CSSJavaScript的鼠标悬停效果教程 ,,2016年06月23日Java多线程——同步(一)2016年11月09日摇盖纸盒包装结构教程2014年01月28日CentOS6.5_64bit下编译安装MySQL-5.6.23【综合】2015年04月01日unity中可以使一个私有的变量在Inspector面板中显示出来和SerializeField的使用 【编程语言】2015年04月09日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)