栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

数据结构---树-删除节点

Java 更新时间:发布时间: 百科书网 趣学号
一、前言
接着之前的一片博客![数据结构---二叉树(遍历查找)](https://img-blog.csdnimg.cn/18f94818961d473fb9b07fafa8b5ca74.png)

,接着后序写,本来是想重新编辑一下,写成一边博客,但是自我感觉,多写一篇博客会有成就感,哈哈哈哈哈(自恋勿cue)

二、思路

现在我有如下这样的二叉树:

我现在想删除其中的一个节点,比如2,或者5,有如下思路:
首先自定义删除规则:如果删除的是叶子节点直接删除叶子结点,如果要删除的不是叶子节点,比如:2,索性直接将2的两个左右子节点删除

分析:
要判断当前的root节点(上图的1号节点)是否为空,则输出此树为空树
root节点如果不为空,则判断root节点是否是要删除的节点
如果是,则直接将root节点置空
如果不是,则递归查找删除节点

三、代码

Node.java

    
    public void delNode(int id) {
        if (this.left != null && this.left.id == id) { // 如果当前节点的左子节点不为空或者当前节点的左子节点就是要删除的节点
            this.left = null; // 删除当前节点的左子节点
            return;
        }
        if (this.right != null && this.right.id == id) { //如果当前节点的右子节点不为空或者当前节点的右子节点就是要删除的节点
            this.right = null;// 删除当前节点的右子节点
            return;
        }

        // 递归查找
        if (this.left != null) {
            this.left.delNode(id);
        }

        // 递归查找
        if (this.right != null) {
            this.right.delNode(id);
        }

    }

BinaryTree.java

    
    public void delNode(int id) {
        if (this.root == null) {
            System.out.println("当前树为空树");
        } else{
            if (this.root.getId() == id) { // 如果当前节点是要删除的节点
                this.root = null;
            } else {
                this.root.delNode(id);
            }
        }
    }

测试结果

补充:
如果要把删除节点的后续节点往上提,规定:把要删除节点的左子节点往上提

    public void delNode(int id) {
        if (this.left != null && this.left.id == id) { // 如果当前节点的左子节点不为空或者当前节点的左子节点就是要删除的节点
            Node temp;
            if (this.left.left != null) { // 将要删除节点的左子节点往上提
                temp = this.left.left;
                this.left = temp;
            } else {
                this.left = null; // 删除当前节点的左子节点
            }
            return;
        }
        if (this.right != null && this.right.id == id) { //如果当前节点的右子节点不为空或者当前节点的右子节点就是要删除的节点
            this.right = null;// 删除当前节点的右子节点
            return;
        }

        // 递归查找
        if (this.left != null) {
            this.left.delNode(id);
        }

        // 递归查找
        if (this.right != null) {
            this.right.delNode(id);
        }
    }
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/1065003.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号