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

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)
}


小笔记

请添加图片描述


猜你喜欢

转载自blog.csdn.net/xjh093/article/details/122856140
今日推荐