二叉搜索树-- 删除节点-力扣 450 题

二叉搜索树-- 删除节点-力扣 450 题_第1张图片

二叉搜索树-- 删除节点-力扣 450 题_第2张图片

二叉搜索树-- 删除节点-力扣 450 题_第3张图片

例题细节已经讲过(二叉搜索树的基础操作-CSDN博客),用非递归和递归均可实现,这里只给出递归参考代码:

public TreeNode deleteNode(TreeNode node, int key) {
    if (node == null) {
        return null;
    }
    if (key < node.val) {
        node.left = deleteNode(node.left, key);
        return node;
    }
    if (node.val < key) {
        node.right = deleteNode(node.right, key);
        return node;
    }
    if (node.left == null) { // 情况1 - 只有右孩子
        return node.right;
    }
    if (node.right == null) { // 情况2 - 只有左孩子
        return node.left;
    }
    TreeNode s = node.right; // 情况3 - 有两个孩子
    while (s.left != null) {
        s = s.left;
    }
    s.right = deleteNode(node.right, s.val);
    s.left = node.left;
    return s;
}
  • 树节点 TreeNode 相当于例题中的 BSTNode

    • TreeNode 有属性:val, left, right,并未区分键值

    • BSTNode 有属性:key, value, left, right,区分了键值

  • 它的 TreeNode 没有 key,比较用的是 TreeNode.val 属性与待删除 key 进行比较

你可能感兴趣的:(数据结构,leetcode,算法,数据结构,java)