98.验证二叉搜索树-python
98.验证二叉搜索树(中等)
题目大意:
给你一个二叉树的根节点 root
,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
- 节点的左子树只包含 小于 当前节点的数。
- 节点的右子树只包含 大于 当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
题目
给你一个二叉树的根节点 root
,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
- 节点的左子树只包含 小于 当前节点的数。
- 节点的右子树只包含 大于 当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例1:
1 |
|
示例2:
1 |
|
提示:
- 树中节点数目范围在
[1, 10^4]
内 -2^31 <= Node.val <= 2^31 - 1
分析和解答
解法一:自己称为上界下界法
该种方法不需要用到额外的变量那种感觉, 开始从一个最小和一个最大开始作为入口,然后递归的判断每个节点是不是在是不是在这个范围内即可
(二叉搜索树的性质:各个节点的val
都不能相同)
对于根节点,其肯定包含在最开始的上界/下界内,然后就开始递归,根的左子树必须在(最小, 根的val)
开区间内,右子树必须在(根的val, 最大)
开区间内
另外注意,因为是判断的题,最后要返回一个bool
的值,所以自递归的时候每个地方也要返回一个True/False
1 |
|
解法二:全局变量法
二叉搜索树本质上就是中序遍历要是递增的,所以使用中序遍历的思想搞一个自递归的函数就差不多了
同样是注意,因为自递归的,每个地方要有个bool
类的返回值
1 |
|
98.验证二叉搜索树-python
http://example.com/2022/03/07/algorithms/leetcode-python/98-验证二叉搜索树-python/