0
点赞
收藏
分享

微信扫一扫

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


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

小笔记


举报

相关推荐

0 条评论