Árbol de búsqueda binaria LeetCode-verificar

P: Dado un árbol binario, determine si es un árbol de búsqueda binario válido.

Supongamos que un árbol de búsqueda binario tiene las siguientes características:

El subárbol izquierdo de un nodo contiene solo menos que el nodo actual.
El subárbol derecho de un nodo contiene solo el número mayor que el nodo actual.
Todos los subárboles izquierdo y derecho deben ser árboles de búsqueda binarios.
Ejemplo 1:

Entrada:
2
/
1 3 Los
salida: true
Ejemplo 2:

Entrada:
5
/
14
  /
  36
de salida: falsa
interpretación: Input como: [5,1,4, null, null, 3,6].
  El nodo raíz tiene un valor de 5, pero su nodo secundario derecho tiene un valor de 4.

R:
Descubrí que cometí dos errores, los cuales inicialmente pensaron atravesar todos los nodos para garantizar que node.right.val> node.val y node.left.val <node.val sean válidos para cada nodo. Pero esto es realmente incorrecto. Debería ser que
los elementos de todo el subárbol derecho deberían ser más grandes que el nodo.
Recorrido en orden. Cada vez que recorro este punto para ver si es más grande que el punto anterior,
comencé a guardar todos los nodos y descubrí que esto no es necesario.

    //这里我开始用的是Integer.MAX_VALUE,结果运行时直接用一个节点,节点数为Integer.MAX_VALUE。所以用的是Double
    private double pre = -Double.MAX_VALUE;
    public boolean isValidBST(TreeNode root) {
        if (root == null)
            return true;
        return inorder(root);
    }

    private boolean inorder(TreeNode root) {
        if (root == null)
            return true;
        boolean flag_left = inorder(root.left);
        boolean flag = true;
        if (root.val <= pre)
            flag = false;
        else
            pre = root.val;
        boolean flag_right = inorder(root.right);
        return flag && flag_left && flag_right;
    }

Supongo que te gusta

Origin www.cnblogs.com/xym4869/p/12676075.html
Recomendado
Clasificación