在 Swift 中判断一个二叉树是否为二叉搜索树,可以通过递归实现。下面是一个基本的实现:
class TreeNode {
var val: Int
var left: TreeNode?
var right: TreeNode?
init(_ val: Int) {
self.val = val
}
}
func isValidBST(_ root: TreeNode?) -> Bool {
return isValidBST(root, nil, nil)
}
func isValidBST(_ node: TreeNode?, _ min: Int?, _ max: Int?) -> Bool {
guard let node = node else {
return true
}
if let min = min, node.val <= min {
return false
}
if let max = max, node.val >= max {
return false
}
return isValidBST(node.left, min, node.val) &&
isValidBST(node.right, node.val, max)
}
上述代码中,定义了一个 TreeNode 类表示二叉树的每一个节点。isValidBST 方法用于判断给定的二叉树是否为二叉搜索树,该方法重载了两个参数:当前节点(可为空)、最小值和最大值。
在实现中,对于当前节点,首先检查其值是否在允许范围内,在这里即其父节点的范围。如果不在范围内,则返回 false。然后,递归地检查其左右子节点,并将新的最小和最大值传递到递归调用中。
最终,如果整个遍历过程中没有发现任何非法情况,则返回 true,否则返回 false。