1 | 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 |
递归
设计一个递归函数 helper(root, lower, upper)
来递归判断,函数表示考虑以 root 为根的子树,判断子树中所有节点的值是否都在 (l,r)
的范围内 (注意是开区间)。如果 root 节点的值 val 不在 (l,r)
的范围内说明不满足条件直接返回,否则我们要继续递归调用检查它的左右子树是否满足,如果都满足才说明这是一棵二叉搜索树。
那么根据二叉搜索树的性质,在递归调用左子树时,我们需要把上界 upper
改为 root.val
,即调用helper(root.left, lower, root.val)
,因为左子树里所有节点的值均小于它的根节点的值。同理递归调用右子树时,我们需要把下界 lower
改为 root.val
,即调用 helper(root.right, root.val, upper)
。
函数递归调用的入口为 helper(root, -inf, +inf)
, inf
表示一个无穷大的值。
作者:LeetCode-Solution
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1 | class Solution { |
二叉搜索树中序遍历
二叉搜索树的中序遍历结果是有序的
通过判断后一个元素是否大于前一个遍历到的元素来判断是不是二叉搜索树
1 | class Solution { |
参考文献