李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
数据结构和算法学习--二叉树删除节点
Leefs
2020-02-09 PM
2151℃
0条
# 数据结构和算法学习--二叉树删除节点 **要求** (1)如果删除的节点是叶子节点,则删除该节点 (2)如果删除的节点是非叶子节点,则删除该子树 (3)测试,删除掉5号叶子节点和3号子树 (4)完全删除思路分析 ![29.二叉树查找指定节点02.png][1] **完成删除节点的操作** (1)如果删除的节点是叶子节点,则删除该节点 (2)如果删除的节点是非叶子节点,则删除该子树 **思路** 首先先处理: 考虑如果树是空树root,如果只有一个root节点,则等价将二叉树置空 //然后进行下面步骤 1. 1.因为我们的二叉树的是单向的,所以我们是判断当前结点的子节点需要删除结点,而不能去判断当前这个结点是不是需要删除结点。 2. 2.如果当前结点的左子结点不为空,并且左子结点就是删除结点,就将this.left=null;并且就返回结束递归删除 3. 3.如果当前结点的右子结点不为空,并且右子结点就是删除结点,就将this.right=null;并且就返回结束递归删除 4. 4.如果第2和第3步没有删除结点,那么我们就需要向左子树进行递归删除 5. 5.如果第4步也没有删除节点,则应当向右子树进行递归删除 **代码实现** ```java //递归删除结点 //1.如果删除的节点是叶子节点,则删除该节点 //2.如果删除的节点是非叶子节点,则删除该子树 public void delNode(int no) { //思路 /* * 1. 因为我们的二叉树是单向的,所以我们是判断当前结点的子结点是否需要删除结点,而不能去判断当前这个结点是不是需要删除结点. 2. 如果当前结点的左子结点不为空,并且左子结点 就是要删除结点,就将this.left = null; 并且就返回(结束递归删除) 3. 如果当前结点的右子结点不为空,并且右子结点 就是要删除结点,就将this.right= null ;并且就返回(结束递归删除) 4. 如果第2和第3步没有删除结点,那么我们就需要向左子树进行递归删除 5. 如果第4步也没有删除结点,则应当向右子树进行递归删除. */ //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); } //5.则应当向右子树进行递归删除 if(this.right != null) { this.right.delNode(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("空树,不能删除~"); } } //测试一把删除结点 System.out.println("删除前,前序遍历"); binaryTree.preOrder(); // 1,2,3,5,4 binaryTree.delNode(5); //binaryTree.delNode(3); System.out.println("删除后,前序遍历"); binaryTree.preOrder(); // 1,2,3,4 ``` [1]: https://lilinchao.com/usr/uploads/2020/02/3492531771.png
标签:
数据结构和算法
,
二叉树
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/578.html
上一篇
数据结构和算法学习--二叉树遍历应用实例(前序,中序,后序)
下一篇
数据结构和算法学习--二叉树查找指定节点
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
递归
Linux
算法
Python
pytorch
稀疏数组
ajax
Quartz
Shiro
人工智能
数学
工具
Sentinel
Ubuntu
Golang基础
设计模式
Hive
LeetCode刷题
排序
MySQL
Redis
Beego
Elasticsearch
字符串
FileBeat
SpringCloudAlibaba
Scala
Spark Streaming
Eclipse
容器深入研究
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭