题目链接
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
- The left subtree of a node contains only nodes with keys less than the node’s key.
- The right subtree of a node contains only nodes with keys greater than the node’s key.
- Both the left and right subtrees must also be binary search trees.
Example 1:
Input:
2
/\
1 3
Output: true
Example 2:
5
/\
1 4
/ \
3 6
Output: false
Explanation: The input is: [5,1,4,null,null,3,6]. The root node’s value
is 5 but its right child’s value is 4.
python代码实现(一):
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def isValidBST(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
if root is None:
return True
if root.left==None and root.right==None:
return True
self.List=[]
self.left_root_right(root) #调用left_root_right()函数,中序遍历二叉搜索树,将节点的值存入列表List中
for i in range(1,len(self.List)):
if self.List[i]<=self.List[i-1]: #通过for循环遍历列表,若当前值少于或等于前一个值,则返回False
return False
return True
def left_root_right(self,root):
if root==None:
return
self.left_root_right(root.left) #中序遍历当前子树的左子树
self.List.append(root.val) #将当前子树的根节点的值存入列表List中
self.left_root_right(root.right)#中序遍历当前子树的右子树
第二种思路:
class Solution(object):
def isValidBST(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
return self.isValid(root, float('-inf'), float('inf'))
def isValid(self, root, min, max):
if not root:
return True
if root.val <= min or root.val >= max:
return False
return self.isValid(root.left, min, root.val) and self.isValid(root.right, root.val, max)