zoukankan      html  css  js  c++  java
  • 递归与二叉树_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
  • 相关阅读:
    C# 多线程传递参数或多个参数
    InnoSetup汉化版打包工具下载-附带脚本模板
    C#使用Protobuf协议-源码分析-附带项目文件
    百度云百度网盘VIP不限速破解版绿色版-实测可用
    (实测可用)GTA5侠盗猎车5中文版破解版迅雷下载地址种子
    串口助手下载-带时间戳的串口助手-极简串口助手-V1.1 自动保存配置参数 能显示收发时间方便调试
    c#tcp多线程服务器实例代码
    C# MVC VS WebAPI
    Android VS IOS
    js玩转数字----取整,四舍五入,数字字符串转换
  • 原文地址:https://www.cnblogs.com/lux-ace/p/10546821.html
Copyright © 2011-2022 走看看