[LeetCode98. 验证二叉搜索树] |刷题打卡

100 阅读1分钟

一、题目描述:

给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:

节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入:

 2

 /  \
1     3

输出: true

引自:leetcode-cn.com/problems/va…

题目链接:98. 验证二叉搜索树

二、思路分析:

  1. 二叉搜索树的左子树结点值小于根结点的值,并且根结点的值小于右子树结点的值;
  2. 二叉搜索树中序遍历顺序为左子树、根结点、右子树,递归遍历的顺序应该满足第一条原则。

三、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 月闯关活动」, 点击查看 活动详情