mirror of
https://github.com/labuladong/fucking-algorithm.git
synced 2025-07-05 03:36:39 +08:00
【450.删除二叉搜索树中的节点】【Python3】
【450.删除二叉搜索树中的节点】【Python3】
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
# 二叉搜索树操作集锦
|
||||
# 二叉搜索树操作集锦
|
||||
|
||||
|
||||
<p align='center'>
|
||||
@ -310,13 +310,13 @@ void BST(TreeNode root, int target) {
|
||||
<img src="../pictures/qrcode.jpg" width=200 >
|
||||
</p>
|
||||
|
||||
|
||||
======其他语言代码======
|
||||
|
||||
### c++
|
||||
|
||||
[dekunma](https://www.linkedin.com/in/dekun-ma-036a9b198/)提供第98题C++代码:
|
||||
```C++
|
||||
|
||||
```c++
|
||||
/**
|
||||
* Definition for a binary tree node.
|
||||
* struct TreeNode {
|
||||
@ -374,9 +374,9 @@ def isValidBST(self, root):
|
||||
|
||||
```
|
||||
|
||||
|
||||
[lixiandea](https://github.com/lixiandea)提供第100题Python3代码:
|
||||
```python3
|
||||
|
||||
```python
|
||||
# Definition for a binary tree node.
|
||||
# class TreeNode:
|
||||
# def __init__(self, val=0, left=None, right=None):
|
||||
@ -400,3 +400,52 @@ class Solution:
|
||||
return p.val==q.val and self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
|
||||
```
|
||||
|
||||
[Edwenc](https://github.com/Edwenc) 提供 leetcode第450题的python3 代码:
|
||||
|
||||
```python
|
||||
# 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 = right
|
||||
|
||||
class Solution:
|
||||
def deleteNode(self, root: TreeNode, key: int) -> TreeNode:
|
||||
# 如果没有树 直接返回None
|
||||
if root == None:
|
||||
return None
|
||||
|
||||
# 如果要删除的结点 就是当前结点
|
||||
if root.val == key:
|
||||
# 左子树为空 只有右子树需要被更新 直接返回
|
||||
if root.left == None:
|
||||
return root.right
|
||||
# 右子树为空 只有左子树需要被更新 直接返回
|
||||
if root.right== None:
|
||||
return root.left
|
||||
|
||||
# 找出此结点左子树的最大值
|
||||
# 用这个最大值 来代替当前结点
|
||||
# 再在左子树中递归地删除这个最大值结点
|
||||
big = self.getMax( root.left )
|
||||
root.val = big.val
|
||||
root.left = self.deleteNode( root.left , big.val )
|
||||
|
||||
# 当前结点较大 它的左子树中需要删除节点 递归到左子树
|
||||
elif root.val > key:
|
||||
root.left = self.deleteNode( root.left , key)
|
||||
# 当前结点较小 它的右子树中需要删除节点 递归到右子树
|
||||
else:
|
||||
root.right= self.deleteNode( root.right, key)
|
||||
|
||||
return root
|
||||
|
||||
# 辅助函数
|
||||
# 功能是找出此二叉搜索树中最大元素的结点 并返回此结点
|
||||
def getMax( self , node ):
|
||||
# 一直找它的右子树 直到为空
|
||||
while node.right:
|
||||
node = node.right
|
||||
return node
|
||||
```
|
Reference in New Issue
Block a user