题目描述:
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
一个二叉搜索树有如下定义:
- 左子树只包含小于当前节点的数。
- 右子树只包含大于当前节点的数。
- 所有子树自身必须也是二叉搜索树。
示例 1:
2 / \ 1 3
二叉树[2,1,3]
, 返回 true.
示例 2:
1 / \ 2 3
二叉树 [1,2,3]
, 返回 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):
"""
:type root: TreeNode
:rtype: bool
"""
rel = []
self.helper(root, rel)
return False if any(rel[i+1]<=rel[i] for i in range(len(rel)-1)) else True
def helper(self, root, rel):
if root:
self.helper(root.left, rel)
rel.append(root.val)
self.helper(root.right, rel)
Discuss:
class Solution(object):
def isValidBST(self, root, lessThan = float('inf'), largerThan = float('-inf')):
if not root:
return True
if root.val <= largerThan or root.val >= lessThan:
return False
return self.isValidBST(root.left, min(lessThan, root.val), largerThan) and \
self.isValidBST(root.right, lessThan, max(root.val, largerThan))
学到:
Discuss中的方法很好,带着两个值去递归,左面应该比根节点的值小,更新lessthan;右面比根节点的值大,更新largerthan。
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
一个二叉搜索树有如下定义:
- 左子树只包含小于当前节点的数。
- 右子树只包含大于当前节点的数。
- 所有子树自身必须也是二叉搜索树。
示例 1:
2 / \ 1 3
二叉树[2,1,3]
, 返回 true.
示例 2:
1 / \ 2 3
二叉树 [1,2,3]
, 返回 false.