leetcode刷题 98 99

leetcode刷题 98 99_第1张图片

leetcode刷题 98 99_第2张图片

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution(object):
    def isValidBST(self, root, mini=float('-inf'), maxi=float('inf')):
        """
        :type root: TreeNode
        :rtype: bool
        """
        return True if not root else \
            mini < root.val < maxi \
            and self.isValidBST(root.left, mini, root.val) \
            and self.isValidBST(root.right, root.val, maxi)

class Solution:
    def isValidBST(self, root: TreeNode) -> bool:
        stack, preNum = [], float("-inf")
        while len(stack) > 0 or root:
            if root:
                stack.append(root)
                root = root.left
            else:
                root = stack.pop()
                if root.val <= preNum:
                    return False
                preNum = root.val
                root = root.right
        return True

leetcode刷题 98 99_第3张图片

leetcode刷题 98 99_第4张图片

class Solution(object):
    def recoverTree(self, root):
        """
        :type root: TreeNode
        :rtype: None Do not return anything, modify root in-place instead.
        """
        """
        python,先中序遍历得到两个列表,然后排序赋值,至于为什么中序遍历?因为二叉搜索树的左<根<右,所以按照中序遍历后的值组可以按照升序排序付给二叉树。
        """
        point=[]
        val=[]
        def inorder(root):
            if root==None:
                return
            inorder(root.left)
            point.append(root)
            val.append(root.val)
            inorder(root.right)
            return
        inorder(root)
        val=sorted(val)
        for i in range(len(point)):
            point[i].val=val[i]

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

class Solution(object):
    def recoverTree(self, root):
        st, n = [], root
        prev, p, q = TreeNode(None), None, None
        while n or st:
            while n:
                st.append(n)
                n = n.left
            n = st.pop()
            if prev.val != None and n.val < prev.val:
                if None == p:
                    p = prev
                q = n
            prev = n
            n = n.right
        p.val, q.val = q.val, p.val

你可能感兴趣的:(leetcode)