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
  • 相关阅读:
    winform 异步更新ui
    定时器的写法 winform
    延迟加载
    使用VS分析程序性能
    win7 C/C++,QT安装环境总结
    论文总结
    天舟一号
    硬盘 SMART 检测参数详解[转]
    碧桃花
    在C的头文件中定义的结构体,如何在cpp文件中引用
  • 原文地址:https://www.cnblogs.com/lux-ace/p/10546821.html
Copyright © 2011-2022 走看看