一、题目描述:
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入:
2
/ \
1 3
输出: true
题目链接:98. 验证二叉搜索树
二、思路分析:
- 二叉搜索树的左子树结点值小于根结点的值,并且根结点的值小于右子树结点的值;
- 二叉搜索树中序遍历顺序为左子树、根结点、右子树,递归遍历的顺序应该满足第一条原则。
三、AC 代码:
class Solution {
var pre : Int = Int.min;
func isValidBST(_ root: TreeNode?) -> Bool {
if (root == nil) {
// 空树
return true;
}
// 中序遍历 依次遍历 左子树、根结点、右子树
// 遍历结果应该是左子树的结点值小于根结点值
// 根结点的值小于右子树结点的值
// 递归遍历左子树
if (!(isValidBST(root?.left))) {
return false;
}
if (pre >= root?.val ?? 0) {
return false;
}
// 注意这里把根结点的值赋给 pre
pre = root?.val ?? 0;
// 最后递归遍历右子树
return isValidBST(root?.right);
}
}
四、参考学习网址
本文正在参与「掘金 3 月闯关活动」, 点击查看 活动详情