【二叉树】验证二叉搜索树

这篇博客介绍了一种通过中序遍历来判断给定二叉树是否为有效二叉搜索树的方法。在二叉搜索树中,每个节点的左子树只包含小于它的节点,右子树只包含大于它的节点。通过递归地进行中序遍历,并比较当前节点值与前一个节点值的关系,可以判断树是否符合这一特性。提供的Swift代码实现了一个名为`isValidBST`的函数,该函数利用深度优先搜索(DFS)进行验证。
摘要由CSDN通过智能技术生成

0x00 题目

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

一个二叉搜索树具有如下 特征
节点的 子树只包含 小于 当前节点的树
节点的 子树只包含 大于 当前节点的树
所有 子树和 子树自身必须也是 二叉搜索树


0x01 思路

二叉搜索树,中序 遍历,是一个 升序 数组
比较 当前 节点的值与 上一个 节点的值,的大小,即可


0x02 解法

语言:Swift

树节点:TreeNode

public class TreeNode {
    public var val: Int
    public var left: TreeNode?
    public var right: TreeNode?
    public init() { self.val = 0; self.left = nil; self.right = nil; }
    public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
    public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
        self.val = val
        self.left = left
        self.right = right
    }
}

解法:

func isValidBST(_ root: TreeNode?) -> Bool {
    // 记录前一个节点的值
    var pre = Int.min
    
    func dfs(_ root: TreeNode?) -> Bool {
        guard let root = root else {
            return true
        }
        
        // 前序遍历位置
        let left = dfs(root.left)
        
        // 中序遍历位置
        // 大于当前节点,则返回 false
        if pre >= root.val {
            return false
        }else{
            // 记录当前节点值
            pre = root.val
        }
        
        // 后序遍历位置
        let right = dfs(root.right)
        
        // 返回 左子树 与 右子树 的结果
        return left && right
    }
    
    return dfs(root)
}


小笔记

请添加图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豪冷啊

你的鼓励是对我的认可!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值