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

Leetcode 450.删除二叉搜索树中的节点

1 题目描述(Leetcode题目链接

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

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

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

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

root = [5,3,6,2,4,null,7]
key = 3

    5
   / \
  3   6
 / \   \
2   4   7

给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。

一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。

    5
   / \
  4   6
 /     \
2       7

另一个正确答案是 [5,2,6,null,4,null,7]5
   / \
  2   6
   \   \
    4   7

2 题解

  二叉搜索树节点的删除方法。详见二叉搜索树

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def minimum(self, y, y_parent):
        while y.left:
            y_parent = y
            y = y.left
        return y, y_parent

    def transplant(self, pre, u, v):
        if not pre:
            return 1
        elif u == pre.left:
            pre.left = v
        else:
            pre.right = v
        return 0

    def deleteNode(self, root: TreeNode, key: int) -> TreeNode:
        pre = None
        target = root
        while target and target.val != key:
            pre = target
            if key > target.val:
                target = target.right
            else:
                target = target.left
        if not target:
            return root

        if not target.left:
            new = self.transplant(pre, target, target.right)
            if new: root = target.right
        elif not target.right:
            new = self.transplant(pre, target, target.left)
            if new: root = target.left
        else:
            y, y_parent = self.minimum(target.right, target)
            if target != y_parent:
                self.transplant(y_parent, y, y.right)
                y.right = target.right
            new = self.transplant(pre, target, y)
            if new: root = y
            y.left = target.left
        return root
发布了264 篇原创文章 · 获赞 63 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_39378221/article/details/105069327