• LeetCode 450. Delete Node in a BST


    LeetCode 450. Delete Node in a BST (删除二叉搜索树中的节点)

    题目

    链接

    https://leetcode.cn/problems/delete-node-in-a-bst/

    问题描述

    给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。

    一般来说,删除节点可分为两个步骤:

    首先找到需要删除的节点;
    如果找到了,删除它。

    示例

    输入:root = [5,3,6,2,4,null,7], key = 3
    输出:[5,4,6,2,null,null,7]
    解释:给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。
    一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。
    另一个正确答案是 [5,2,6,null,4,null,7]。

    提示

    节点数的范围 [0, 104].
    -105 <= Node.val <= 105
    节点值唯一
    root 是合法的二叉搜索树
    -105 <= key <= 105

    进阶: 要求算法时间复杂度为 O(h),h 为树的高度。

    思路

    分类讨论删除点子节点的情况,进行删除。

    复杂度分析

    时间复杂度 O(n)
    空间复杂度 O(1)
    

    代码

    Java

        public TreeNode deleteNode(TreeNode root, int key) {
            root = delete(root, key);
            return root;
        }
    
        public TreeNode delete(TreeNode root, int key) {
            if (root == null) {
                return null;
            }
    
            if (root.val > key) {
                root.left = delete(root.left, key);
            } else if (root.val < key) {
                root.right = delete(root.right, key);
            } else {
                if (root.left == null) {
                    return root.right;
                }
                if (root.right == null) {
                    return root.left;
                }
                TreeNode tmp = root.right;
                while (tmp.left != null) {
                    tmp = tmp.left;
                }
                root.val = tmp.val;
                root.right = delete(root.right, tmp.val);
            }
            return root;
        }
    
  • 相关阅读:
    Excel 实用技巧之一
    Windows操作技巧 之二(持续更新)
    ASCII码表
    Excel 函数VLOOKUP初学者使用指南
    Windows 操作小技巧 之一(持续更新)
    Excel 使用宏批量修改单元格内指定文字为红字
    Excel 使用CHIINV函数和GAMMA.DIST函数绘制卡方分布
    新手使用R的注意事项
    如何在R中加载”xlsx”包
    增值税——基础知识
  • 原文地址:https://www.cnblogs.com/blogxjc/p/16363630.html
Copyright © 2020-2023  润新知