• 递归与二叉树_leetcode450


    # 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
  • 相关阅读:
    Java虚拟机
    Java集合常见面试题一
    5个新自动化测试框架,你值得了解
    Mock工具介绍
    空降,如何做好管理?
    QA在业务变动中如何维护测试用例?
    接口越权扫描平台初探
    程序员删代码泄愤,被判刑5个月,网友:年轻人不讲武德?!
    哪些 Python 库让你相见恨晚?
    两篇毕业论文致谢同一个女朋友?哈哈哈哈!
  • 原文地址:https://www.cnblogs.com/lux-ace/p/10546821.html
Copyright © 2020-2023  润新知