博客
关于我
450. 删除二叉搜索树中的节点
阅读量:538 次
发布时间:2019-03-08

本文共 1374 字,大约阅读时间需要 4 分钟。

二叉搜索树(BST)的删除操作通常分为两步:首先找到需要删除的节点,然后删除它。为了保持树的性质,删除操作必须确保新的树仍然是二叉搜索树。

删除操作步骤

  • 检查根节点是否为空:如果树为空,直接返回根节点。
  • 找到目标节点
    • 如果键值小于当前节点的值,递归删除左子树。
    • 如果键值大于当前节点的值,递归删除右子树。
    • 如果键值等于当前节点的值,处理这种情况:
      • 如果当前节点只有一个左子树或没有左子树,返回另一个子树。
      • 如果当前节点有两个子树,找到右子树中的最小值节点,并删除它。
  • 删除节点:在找到目标节点后,删除它,并调整指针以保持树的性质。
  • 代码实现

    public class Solution {
    public TreeNode deleteNode(TreeNode root, int key) {
    if (root == null) {
    return root;
    }
    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;
    }
    root.val = minValue(root.right);
    root.right = deleteNode(root.right, root.val);
    }
    return root;
    }
    private int minValue(TreeNode root) {
    int minVal = root.val;
    while (root.left != null) {
    minVal = root.left.val;
    root = root.left;
    }
    return minVal;
    }
    }

    代码解释

    • deleteNode方法:递归寻找并删除键值对应的节点。
      • 如果键值小于当前节点值,递归处理左子树。
      • 如果键值大于当前节点值,递归处理右子树。
      • 如果键值等于当前节点值,处理该节点的左、右子树情况。
        • 如果只有左子树,返回右子树。
        • 如果只有右子树,返回左子树。
        • 否则,找到右子树的最小值节点并删除它。
    • minValue方法:递归寻找右子树中的最小值节点。

    这种方法确保了删除操作的时间复杂度为O(h),其中h是树的高度,符合题目要求。代码结构清晰,逻辑严谨,适用于各种二叉搜索树删除场景。

    转载地址:http://rlniz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现NLP中文分词(附完整源码)
    查看>>
    Objective-C实现NLP中文分词(附完整源码)
    查看>>
    Objective-C实现not gate非门算法(附完整源码)
    查看>>
    Objective-C实现number of digits解字符数算法(附完整源码)
    查看>>
    Objective-C实现NumberOfIslands岛屿的个数算法(附完整源码)
    查看>>
    Objective-C实现n皇后问题算法(附完整源码)
    查看>>
    Objective-C实现OCR文字识别(附完整源码)
    查看>>
    Objective-C实现odd even sort奇偶排序算法(附完整源码)
    查看>>
    Objective-C实现page rank算法(附完整源码)
    查看>>
    Objective-C实现PageRank算法(附完整源码)
    查看>>
    Objective-C实现pascalTriangle帕斯卡三角形算法(附完整源码)
    查看>>
    Objective-C实现perfect cube完全立方数算法(附完整源码)
    查看>>
    Objective-C实现PNG图片格式转换BMP图片格式(附完整源码)
    查看>>
    Objective-C实现pollard rho大数分解算法(附完整源码)
    查看>>
    Objective-C实现quick select快速选择算法(附完整源码)
    查看>>
    Objective-C实现recursive bubble sor递归冒泡排序算法(附完整源码)
    查看>>
    Objective-C实现recursive insertion sort递归插入排序算法(附完整源码)
    查看>>
    Objective-C实现RedBlackTree红黑树算法(附完整源码)
    查看>>
    Objective-C实现redis分布式锁(附完整源码)
    查看>>
    Objective-C实现reverse letters反向字母算法(附完整源码)
    查看>>