【Arbre binaire】Vérifiez l'arbre de recherche binaire

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


petites notes

Veuillez ajouter une description de l'image


Je suppose que tu aimes

Origine blog.csdn.net/xjh093/article/details/122856140
conseillé
Classement