[LeetCode] 671. En segundo nodo mínimo en un árbol binario

Un segundo nodo del árbol binario es pequeño. Dado un no nulo binario particular, cada uno de los nodos son positivos, y el número de nodos hijos de cada nodo sólo puede ser 0 o 2. Si un nodo tiene dos nodos hijo, entonces el valor de este nodo no es mayor que el valor de sus nodos secundarios. Dada tal árbol binario, lo que necesita para dar salida a un segundo valor pequeño en todos los nodos. Si no existe el segundo valor pequeño, la salida de -1. Ejemplo,

Ejemplo 1:

Entrada: 
    2 
   / \ 
  2 5 
     / \ 
    5 7 

salida: 5 
Explicación: El valor más pequeño es 2, el valor de segundo más pequeño es 5.

 

Ejemplo 2:

Entrada: 
    2 
   / \ 
  2 2 

Salida: -1 
Descripción: El valor más pequeño es 2, pero no hay ningún valor de segundo más pequeño.

Esta pregunta es muy similar a la del título 230 , pero esta cuestión no es BST sino un árbol binario ordinario. Dado que el tema de que el valor de cada uno de los padres debe ser inferior a la altura de su nodo hijo, y luego encontrar el nodo es el segundo más pequeño, por lo que puede estar seguro de que la raíz de la raíz del árbol de Val debe ser mínima. Por lo tanto, para establecer una variable para recordar el valor y una Integer.MAX_VALUE raíz, el árbol entonces orden previo, si cualquier nodo tiene un valor de entre root.val y Integer.MAX_VALUE, a continuación, el segundo más pequeño delante nodo de encontrar.

Tiempo de O (n)

Espacio O (n)

implementación de Java

1  clase Solution {
 2      int min1;
3      largos res = Long.MAX_VALUE;
4  
5      público  int findSecondMinimumValue (raíz TreeNode) {
 6          min1 = root.val;
7          dfs (raíz);
8          de retorno res <Long.MAX_VALUE? ( Int ) res: -1 ;
9      }
 10  
11      públicos  vacíos DFS (raíz TreeNode) {
 12          si (raíz! = Nula ) {
 13              si (min-1 <root.val && root.val <res) {
 14                  res = root.val;
15              } más  si (min1 == root.val) {
 16                  dfs (root.left);
17                  dfs (root.right);
18              }
 19          }
 20      }
 21 }

 

implementación de JavaScript

1  / * *
 2  @ param * {TreeNode} raíz
 3  * @return {número}
 4   * / 
5  var findSecondMinimumValue = función (raíz) {
 6      let min1;
7      vamos a res = infinito;
8      Si (root =! Nula ) {
 9          min-1 = root.val;
10      }
 11  
12      var ayudante = función (raíz) {
 13          si (raíz! = Nula ) {
 14              si(min1 <root.val && root.val < res) {
 15                  res = root.val;
16              } demás  si (min-1 == root.val) {
 17                  helper (root.left);
18                  helper (root.right);
19              }
 20          }
 21      }
 22      helper (raíz);
23      de retorno res <infinito? res: -1 ;
24 };

 

Supongo que te gusta

Origin www.cnblogs.com/aaronliu1991/p/12529272.html
Recomendado
Clasificación