递归与二叉树_leetcode450

该博客为转载内容,转载自https://www.cnblogs.com/lux-ace/p/10546821.html ,涉及数据结构与算法领域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

class Solution1(object):
def deleteNode(self, root, key):
"""
:type root: TreeNode
:type key: int
:rtype: TreeNode
"""
if not root:
return root

if root.val > key:
root.left = self.deleteNode(root.left,key)
return root
elif root.val < key :
root.right = self.deleteNode(root.right,key)
return root

else:
if not root.left:
successor = root.right
root.right = None
return successor
if not root.right:
successor = root.left
root.left = None
return successor

successor = self.minNode(root.right)

successor.right = self.removeMin(root.right)
successor.left = root.left

root.left = None
root.right = None

return successor


def minNode(self,root):
if not root.left:
return root
return self.minNode(root.left)

def maxNode(self,root):
if not root.right:
return root
return self.maxNode(root.right)

def removeMin(self,root):

if not root.left:
successor = root.right
root.right = None
return successor
root.left = self.removeMin(root.left)
return root




def removeMax(self,root):
if not root.right :
successor = root.left
root.left = None
return successor
root.right = self.removeMax(root.right)
return root


class Solution2(object):
def deleteNode(self, root, key):
"""
:type root: TreeNode
:type key: int
:rtype: TreeNode
"""
if not root:
return root

if root.val > key:
root.left = self.deleteNode(root.left,key)
return root
elif root.val < key :
root.right = self.deleteNode(root.right,key)
return root

else:
if not root.left:
successor = root.right
root.right = None
return successor
if not root.right:
successor = root.left
root.left = None
return successor

successor = self.maxNode(root.left)

successor.left = self.removeMax(root.left)
successor.right = root.right

root.left = None
root.right = None

return successor


def minNode(self,root):
if not root.left:
return root
return self.minNode(root.left)

def maxNode(self,root):
if not root.right:
return root
return self.maxNode(root.right)

def removeMin(self,root):

if not root.left:
successor = root.right
root.right = None
return successor
root.left = self.removeMin(root.left)
return root





def removeMax(self,root):
if not root.right :
successor = root.left
root.left = None
return successor
root.right = self.removeMax(root.right)
return root

转载于:https://www.cnblogs.com/lux-ace/p/10546821.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值