验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数
- 节点的右子树只包含大于当前节点的数
- 所有左子树和右子树自身必须也是二叉搜索树
思路
中序遍历下,输出的二叉搜索树节点的数值是有序序列。
有了这个特性,验证二叉搜索树,就相当于变成了判断一个序列是不是递增的了
- 确定递归函数的参数和返回值
- 参数:要定义一个
longlong
的全局变量,用来比较遍历的节点是否有序,因为后台测试数据中有int
最小值,所以要定义为longlong
的类型,初始化为longlong
最小值 - 返回值:只有寻找某一条边(或者一个节点)的时候,递归函数会有
bool
类型的返回值
- 参数:要定义一个
- 终止条件:若为空节点,则直接返回
true
- 确定单层递归逻辑
- 分别对左子树和右子树递归判断,如果左子树和右子树都符合则返回
true
,一直更新minVal
或maxVal
,一旦发现minVal >= node.Val
或max <= node.Val
,就返回false
,注意元素相同时候也要返回false
- 分别对左子树和右子树递归判断,如果左子树和右子树都符合则返回
代码
Go
|
|