题目:
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
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==None:
return True
#存放中序遍历结果的list
midlist=list()
#递归返回二叉树的中序遍历结果
def midOrder(root,midlist):
if root==None:
return
else:
midOrder(root.left,midlist)
midlist.append(root)
midOrder(root.right,midlist)
return midlist
#得到二叉树的中序遍历list
midOrder(root,midlist)
i=0
#验证是否为递增序列
while i<len(midlist)-1:
if midlist[i].val>=midlist[i+1].val:
return False
i=i+1
return True
思路:
由题目可知,有效的二叉搜索树的中序遍历结果为递增序列(实际上可以是非递减序列),通过递归得到二叉树的中序遍历结果list,遍历这个list,若不为递增序列,则返回Fase,否则返回True.
复杂度分析
时间复杂度:
O
(
n
)
O(n)
O(n) ,n为二叉树的节点数
空间复杂度:
O
(
n
)
O(n)
O(n)