sujet 0x00
Étant donné un arbre binaire
, déterminer s'il s'agit d'un arbre valide二叉搜索树
Un arbre de recherche binaire a ce qui suit 特征
: Le
sous-arbre d'un nœud contient uniquement l'arbre du nœud courant Le sous-arbre d' un nœud contient uniquement l'arbre du nœud courant Tous les sous-arbres et sous- arbres doivent également être左
小于
右
大于
左
右
二叉搜索树
0x01 Idées
L'arbre de recherche binaire, 中序
traversal, est un 升序
tableau
permettant de 当前
comparer 上一个
la taille de la valeur du nœud avec la valeur du nœud, vous pouvez
Solution 0x02
Langue:Swift
nœud d'arborescence :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
}
}
Solution:
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)
}