题目
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数
- 节点的右子树只包含大于当前节点的数
- 所有左子树和右子树自身必须也是二叉搜索树
示例:
1 | 输入: |
解法
这道题提供三种解法
使用二叉树中序遍历的方法
根据二叉搜索树的性质,可以得出二叉搜索树使用中序遍历得到的序列应该是一个升序的序列,所以我们可以利用这一性质来判断其是否为二叉搜索树
Python 代码
1 | def isValidBST(self, root): |
只考虑当前节点的上一级
另外,我们可以简化上面的方法,因为二叉搜索树实际上就是要保证,在中序遍历的顺序下,当前节点的值一定要大于前一个节点的值
Python 代码
1 | def isValidBST(self, root): |
使用递归
除中序遍历的方法外,我们还可以使用递归的思想,根据二叉搜索树的性质,我们只需要满足当前节点的左子树中的最大值比节点值小,右子树中的最小值比节点值大
即可证明其为二叉搜索树
Java 代码
1 | public boolean isValidBST(TreeNode root) { |