1、题目描述:
2、题解:
方法1:中序遍历的递归法:
二叉搜索树的中序遍历是有序的。
我们定义一个pre,代表遍历时结点的上一个值,如果所有的pre < cur 则是二叉搜索树,否则,不是,提前返回False。
中序遍历时:我们先判断根节点是否为空,为空,返回真。然后看左子树,处理根节点,最后看右子树。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isValidBST(self, root):
# 中序遍历,递归
self.pre = TreeNode(float('-inf'))
return self.inOrder(root)
def inOrder(self, root):
if not root:
return True
# 左子树
if not self.inOrder(root.left):
return False
# 处理根节点
if self.pre.val >= root.val:
return False
self.pre = root
# 右子树
return self.inOrder(root.right)
方法2:中序遍历的迭代写法
需要一个栈去实现迭代,注意使用方式
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isValidBST(self, root):
#中序遍历,迭代
pre,stack = TreeNode(float('-inf')),[]
while root or stack:
while root:
stack.append(root)
root = root.left
root = stack.pop()
if pre.val >= root.val:
return False
pre = root
root = root.right
return True
3、复杂度分析:
方法1和方法2:
时间复杂度:O(N)
空间复杂度:O(N)