首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

递归返回java中删除的节点

递归返回Java中删除的节点是指在Java编程语言中,使用递归算法删除节点后,需要返回被删除的节点。下面是一个完善且全面的答案:

在Java中,递归删除节点是一种常见的操作,特别是在树或链表等数据结构中。递归删除节点的过程可以分为以下几个步骤:

  1. 首先,判断当前节点是否为空。如果为空,则说明已经遍历到了树或链表的末尾,直接返回null。
  2. 然后,判断当前节点是否是要删除的节点。如果是,则将该节点的引用保存到一个临时变量中,以便后续返回。
  3. 接下来,递归调用删除函数,传入当前节点的左子节点,并将返回值赋给当前节点的左子节点。
  4. 再次递归调用删除函数,传入当前节点的右子节点,并将返回值赋给当前节点的右子节点。
  5. 最后,返回当前节点。

以下是一个示例代码,演示了如何递归删除节点并返回被删除的节点:

代码语言:txt
复制
public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    public TreeNode(int val) {
        this.val = val;
    }
}

public class Solution {
    public TreeNode deleteNode(TreeNode root, int key) {
        if (root == null) {
            return null;
        }

        if (key < root.val) {
            root.left = deleteNode(root.left, key);
        } else if (key > root.val) {
            root.right = deleteNode(root.right, key);
        } else {
            if (root.left == null) {
                return root.right;
            } else if (root.right == null) {
                return root.left;
            }

            TreeNode minNode = findMin(root.right);
            root.val = minNode.val;
            root.right = deleteNode(root.right, root.val);
        }

        return root;
    }

    private TreeNode findMin(TreeNode node) {
        while (node.left != null) {
            node = node.left;
        }
        return node;
    }
}

在这个示例代码中,我们定义了一个TreeNode类来表示树的节点。deleteNode方法是递归删除节点的主要函数。它接受一个根节点和一个要删除的键值作为参数,并返回删除后的根节点。

在删除节点的过程中,我们首先判断当前节点是否为空,如果为空则直接返回null。然后判断当前节点是否是要删除的节点,如果是则保存该节点的引用到一个临时变量中。接下来,递归调用删除函数来删除当前节点的左子节点和右子节点。最后,返回当前节点。

这个示例代码中没有提及具体的腾讯云产品和产品介绍链接地址,因为在这个问题中要求不提及云计算品牌商。但是,腾讯云提供了丰富的云计算产品和服务,可以根据具体需求选择适合的产品来支持开发工作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

java递归查询父节点_java递归例子

如果当前用户没有设置过该教材章课节,就为其设置默认第一章、第一课、第一节。 数据库设计:此处将章课节所有信息存放到一张表,可递归查询。最上一级章parentid是教材id。...二、解决 已设置我们这里不讨论,只需要到库查询对应章课节即可。...那么对于默认第一章第一课第一节,我们这里使用一个递归函数将查询结果存放到一个list /*** 根据给定id,查询其下第一课、第一节(不只适用于章课节三级,如果下面还有级别的目录,也可查 * *...(e.getMessage(),e); } } 递归查询特点:函数方法自己掉用自己,通过某个条件判断跳出最后一个被调用递归方法。...如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除

2.3K10
  • 删除链表节点

    题目描述 难度级别:简单 请编写一个函数,使其可以删除某个链表给定(非末尾)节点。传入函数唯一参数为 要被删除节点 。...示例 2: 输入:head = [4,5,1,9], node = 1 输出:[4,5,9] 解释:给定你链表中值为 1 第三个节点,那么在调用了你函数之后,该链表应变为 4 -> 5 -> 9....提示: 链表至少包含两个节点。 链表中所有节点值都是唯一。 给定节点为非末尾节点并且一定是链表一个有效节点。 不要从你函数返回任何结果。...解题思路 题目中待传递给当前函数实参node,它是链表某一个待删除节点,然后从链表删除这个节点。...这里因为待传入实参没有完整链表,所以无法获取到之前节点,所以无法修改前一个节点next指向。这时需要是将要删除节点值替换为它下一个节点值,之后要删除这个节点next指向为下下一项。

    2.4K00

    237 删除链表节点

    01 题目信息 题目地址: https://leetcode-cn.com/problems/delete-node-in-a-linked-list/ 请编写一个函数,使其可以删除某个链表给定(非末尾...传入函数唯一参数为 要被删除节点 。 现有一个链表 -- head = [4,5,1,9],它可以表示为: ?...提示: 链表至少包含两个节点。 链表中所有节点值都是唯一。 给定节点为非末尾节点并且一定是链表一个有效节点。 不要从你函数返回任何结果。...x) { val = x; } } 现在它传一条链表一个节点删除这个节点。...值为4节点是指向5这个节点删除5节点就是让4节点直接指向1节点就可以了,但我们拿不到4节点所以不能改变它next属性值。那么我们只能改它指向节点把它值由5改成1再指向9 ?

    1.3K10

    删除链表重复节点.

    前言 在一个排序链表,存在重复节点,如何删除链表重复节点返回删除链表头指针?例如:1->2->3->3->4->4->5,处理后为: 1->2->5。...找到后,我们将其传入递归函数,并返回这个递归函数;如果当前节点pHead与它下一个节点不等,我们就将其下一个节点传入递归函数,修改pHead下一个节点指向为此递归函数。...,寻找与当前节点不重复节点;找到后继续调用递归函数,将不重复节点作为参数传入,最后返回这个递归函数。...如果不相等,则修改pHead.next指向,使用递归函数求出当前不相等节点,最后返回pHead。...* * 删除链表重复节点(递归解法) * @param pHead 链表头节点 */ deleteDuplicatesNodeForRecursion(pHead: ListNode

    2.8K40

    2 删除链表节点

    复习链表插入 链表一个节点是由数据域和指针域构成,指针域地址值为下个元素地址。那么我们需要插入或者删除一个元素怎么处理呢? ? 先查看原始链表结构,准备将结点x插入链表。 ?...复习链表删除 上面简单介绍了带头结点链表,在删除处理时候同样适用,所以我们以后就直接采用带头结点链表讲解。下面直接看看删除节点图。 ?...1 Leetcode237 删除链表节点 请编写一个函数,使其可以删除某个链表给定(非末尾)节点,你将只被给定要求被删除节点。...说明: 链表至少包含两个节点。 链表中所有节点值都是唯一。 给定节点为非末尾节点并且一定是链表一个有效节点。 不要从你函数返回任何结果。 先思考一分钟哟! 效果更好哈!...3 java版本 ?

    1.3K20

    删除链表倒数第N个节点,并返回链表节点

    大概内容:删除链表倒数第N个节点,并返回链表节点。...在解题过程要添加一个亚节点(dummy)进行辅助(如:图1),D就是我们节点。 ?...4、这时第二个指针所指向节点下一个节点就是要删除节点(倒数第N个节点),将第二个指针指向节点next指向下下个节点就完成了。 ?...仔细查看评论区我们又看到不错解题思路,使用递归方法和特性实现 0x03:递归特性 实现思路: 1、利用递归调用特性先循环一遍链表,相当于用指针从链表头走到链表尾(如:图3-2) 2、递归调用在调用自身方法后面会倒叙循环调用...这里递归特性和使用会在后面单独写一篇文章来说明。 ? 图3-1 ?

    46520

    Java链表删除节点操作

    只要输入要删除学生成绩,就可以遍历该链表,并清除学生节点, * 要结束输入时,输入“-1”,则此时会列出该链表未删除所有学生数据。...:只要将删除节点前一个节点指针指向要删除节点下一个节点即可 else { newNode = first; tmp = first; while (newNode.data...,清除节点,结束输入时输入-1 import java.io.*; import java.util.*; /** * 程序目的:利用链表建立、删除和打印学生成绩 * * @author 86176...要删除成绩其学号必须在此链表\n"); List.print(); } } } } } 输出: 学号 成绩 学号 成绩 学号 成绩 学号 成绩...要删除成绩其学号必须在此链表 [1Allen78] [2Scott82] [3Bell78] [4Kobe77] [5Jamse59] [6Jack52] [7Gorge67] [8Yao99]

    1.1K10

    Swift 删除链表节点 - LeetCode

    LeetCode 题目: 删除链表节点 请编写一个函数,使其可以删除某个链表给定(非末尾)节点,你将只被给定要求被删除节点。...= 4,5,1,9,它可以表示为: 4 -> 5 -> 1 -> 9 示例1: 输入: head = [4,5,1,9], node = 5 输出: [4,1,9] 解释: 给定你链表中值为 5 第二个节点...,那么在调用了你函数之后,该链表应变为 4 -> 1 -> 9....示例2: 输入: head = [4,5,1,9], node = 1 输出: [4,5,9] 解释: 给定你链表中值为 1 第三个节点,那么在调用了你函数之后,该链表应变为 4 -> 5 -> 9...说明: 链表至少包含两个节点。 链表中所有节点值都是唯一。 给定节点为非末尾节点并且一定是链表一个有效节点。 不要从你函数返回任何结果。

    1.3K40

    java递归算法_java递归算法详解

    大家好,又见面了,我是你们朋友全栈君。 Java递归算法虽然简单,但想要精通也是有着一定难度,本篇文章我们就来详细了解下递归算法。 什么是递归?...一般说, 递归算法是一种直接或间接地调用自身算法。在程序递归算法能够使算法描述简洁而且易于理解。 递归分几类? 递归通常分为两类,直接递归和间接递归: 1、直接递归称为方法自身调用自己。...2、间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。 递归怎么实现实现?...static int getSum(int num) { if (num == 1) { return 1; } return num + getSum(num – 1); } } 以上就是本篇文章所有内容...,更多详细java入门敬请关注奇Q工具网了解详情。

    1.6K20
    领券