天天看点

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

0x00 题目

给定一个二叉树

判断其是否是一个有效的 ​​

​二叉搜索树​

一个二叉搜索树具有如下 ​

​特征​

​​:

节点的 ​​

​左​

​​ 子树只包含 ​

​小于​

​​ 当前节点的树

节点的 ​​

​右​

​​ 子树只包含 ​

​大于​

​​ 当前节点的树

所有 ​​

​左​

​​ 子树和 ​

​右​

​​ 子树自身必须也是 ​

​二叉搜索树​

0x01 思路

二叉搜索树,​

​中序​

​​ 遍历,是一个 ​

​升序​

​​ 数组

比较 ​​

​当前​

​​ 节点的值与 ​

​上一个​

​ 节点的值,的大小,即可

0x02 解法

语言:​

​Swift​

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

小笔记

继续阅读