Question 98: Vérifiez l'arbre de recherche binaire (parcours récursif, dans l'ordre)

1. Titre

Insérez la description de l'image ici

2. Mes premières réflexions et problèmes

Légèrement, regardez directement la solution

3. Méthode de résolution de problèmes 1: récursivité

Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image iciInsérez la description de l'image ici

class Solution {
    
    
    public boolean isValidBST(TreeNode root) {
    
    
        return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);
    }

    public boolean isValidBST(TreeNode node, long lower, long upper) {
    
    
        if (node == null) {
    
    
            return true;
        }
        if (node.val <= lower || node.val >= upper) {
    
    
            return false;
        }
        return isValidBST(node.left, lower, node.val) && isValidBST(node.right, node.val, upper);
    }
}

Insérez la description de l'image ici

4. Méthode de résolution de problèmes 2: traversée d'ordre intermédiaire

Insérez la description de l'image ici

class Solution {
    
    
    public boolean isValidBST(TreeNode root) {
    
    
        Deque<TreeNode> stack = new LinkedList<TreeNode>();
        double inorder = -Double.MAX_VALUE;

        while (!stack.isEmpty() || root != null) {
    
    
            while (root != null) {
    
    
                stack.push(root);
                root = root.left;
            }
            root = stack.pop();
              // 如果中序遍历得到的节点的值小于等于前一个 inorder,说明不是二叉搜索树
            if (root.val <= inorder) {
    
    
                return false;
            }
            inorder = root.val;
            root = root.right;
        }
        return true;
    }
}

Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/ambitionLlll/article/details/114331883
conseillé
Classement