题目链接:https://leetcode-cn.com/problems/delete-node-in-a-bst/
难度:中等
描述:
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
一般来说,删除节点可分为两个步骤:
- 首先找到需要删除的节点;
- 如果找到了,删除它。
题解
思路:
这里就简单地把待删除结点node的左子树放到node的后继下,而不是采用CLRS中用node的后继来代替node的做法。
# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution:def deleteNode(self, root: Optional[TreeNode], key: int) -> Optional[TreeNode]:if root is None:return Noneif root.val > key:root.left = self.deleteNode(root.left, key)elif root.val < key:root.right = self.deleteNode(root.right, key)else:# 右子节点为空也行if root.left is None:return root.rightelif root.right is None:return root.leftelse:temp = root.right# 找到root的后继while temp.left is not None:temp = temp.lefttemp.left = root.leftreturn root.rightreturn root
