法一:中序遍历
执行用时: 52 ms , 在所有 Python3 提交中击败了76.78% 的用户
内存消耗:17.2 MB , 在所有 Python3 提交中击败了48.72% 的用户
用到了栈,其实就是python的列表
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isValidBST(self, root: TreeNode) -> bool:
stack=[]
inorder=float('-inf')
while stack or root:
while root:
stack.append(root)
root=root.left
root=stack.pop()
if root.val<=inorder:
return False
inorder=root.val
root=root.right
return True
法二:递归
执行用时:72 ms, 在所有 Python3 提交中击败了8.24%的用户
内存消耗:17.2 MB, 在所有 Python3 提交中击败了42.68%的用户
class Solution:
def isValidBST(self, root: TreeNode) -> bool:
def helper(root,lower=float('-inf'),upper=float('inf')):
if not root:
return True
if root.val>=upper or root.val<=lower:
return False
if not helper(root.left,lower,root.val):
return False
if not helper(root.right,root.val,upper):
return False
return True
return helper(root)
自己的笨方法
60 ms 17.6 MB Python3
#自己的笨方法
if root==None:
return True
#判断左节点
if root.left!=None:
va=self.isValidBST(root.left)
if va==False:
return False
#判断右节点
if root.right!=None:
vb=self.isValidBST(root.right)
if vb==False:
return False
#判断左节点最大值
t1=root.left
if t1!=None:
while t1.right!=None:
t1=t1.right
if t1.val>=root.val:
return False
#判断右节点最大值
t2=root.right
if t2!=None:
while t2.left!=None:
t2=t2.left
if t2.val<=root.val:
return False
#最终返回
return True