题目描述:
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:
2 / \ 1 3
Binary tree [2,1,3], return true.
Example 2:
1 / \ 2 3
Binary tree [1,2,3], return false.
思路:
题目是判断一棵树是否为二叉搜索树,根据二叉搜索树的定义我们可以对给定的树实行中序遍历判断得到的遍历结果是否为升序排列,若是则返回True,否则为False,时间复杂度为O(n)
AC代码:
class Solution(object):
def isValidBST(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
def inOrderTravel(root):
if root.left:
inOrderTravel(root.left)
res.append(root.val)
if root.right:
inOrderTravel(root.right)
res = []
inOrderTravel(root)
if not root:
return True
for i in range(len(res) - 1):
if res[i + 1] <= res[i]:
return False
return True