题目
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数。
- 节点的右子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
1 | 输入: |
示例 2:
1 | 输入: |
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
- The left subtree of a node contains only nodes with keys less than the node’s key.
- The right subtree of a node contains only nodes with keys greater than the node’s key.
- Both the left and right subtrees must also be binary search trees.
Example 1:
1 | Input: |
Example 2:
1 | 5 |
解题方法
中序遍历
使用中序遍历,因为对于二叉搜索树,中序遍历就是从小到大遍历,使用一个私有属性保留当前最小值,初始化为long型最小值,保证比树中所有值小,每次访问于当前最小值比较,如果比最小值小或者等于则不为二叉搜索树,比最小值大则更新当前最小值。这段代码跑了0ms,超过了100%的java提交。
1 | class Solution { |
两边夹逼
另外一种方法是给出每棵字数的上限、下限,递归判断每棵子树是否为可用的BST。这段代码跑了0ms,超过了100%的java提交。
1 | class Solution { |