【Diario de preguntas de pincel】 1022. Suma de números binarios desde la raíz hasta la hoja

¡Continúe creando, acelere el crecimiento! Este es el 4to día de mi participación en el "Nuggets Daily New Plan · June Update Challenge", haz clic para ver los detalles del evento

El artículo 50 de este diario de escritura, el título es: la suma de números binarios desde la raíz hasta la hoja , simple

1. Descripción del tema:

Es otra pregunta sobre árboles binarios. Las preguntas sobre árboles binarios son relativamente simples. Siempre y cuando lo entiendas, será fácil de hacer.

2. ¿Qué idea examina esta pregunta? ¿Cuál es tu pensamiento?

El título es relativamente claro, es decir, busquemos la ruta desde el nodo raíz hasta cada nodo hoja del árbol binario proporcionado por el título, y luego sumemos todas las rutas

La pequeña diferencia es que para cada ruta, necesitamos ensamblar los nodos en la ruta en la forma binaria de 101010 para el cálculo, nada especial.

analizar

Es obvio que aquí se requiere el recorrido del árbol binario, por lo que sabemos que hay 3 formas de recorrer recursivamente el árbol binario

  • Recorrido de pedido anticipado , nodo raíz -> nodo izquierdo -> nodo derecho
  • Recorrido en orden , nodo izquierdo -> nodo raíz -> nodo derecho
  • Recorrido posterior al pedido , nodo izquierdo -> nodo derecho -> nodo raíz

Por supuesto, cualquiera que sea el método de recorrido que usemos, podemos usar una lógica diferente para ensamblar la ruta requerida por el problema, así que elijamos cualquiera y tomemos el recorrido posterior al pedido como ejemplo.

Puedes ver que la primera ruta del árbol binario dado en la figura es 1,0,0

Entonces, ¿cómo ensamblamos estos 3 nodos en 100 ?

De hecho, es relativamente claro

  • Cuando viajamos al primer nodo, a val se le asigna un valor de 1
  • Al pasar al segundo nodo, val << 1 | valor del nodo actual == 10 | 0 == 10 --> val = 10
  • De manera similar, al atravesar el tercer nodo, val << 1 | El valor del nodo actual == 100 | 0 == 100 --> val = 100 = 4

Entonces lo mismo es cierto al atravesar el segundo camino, y también se puede ensamblar en 101 = 5

Luego, cuando calculamos el resultado, no es difícil pensar que el enlace de todo el árbol es el enlace del subárbol izquierdo + el enlace del subárbol derecho y

Luego está sum(root) = sum(root.left) + sum(root.right)

3. Codificación

De acuerdo con la lógica y el análisis anteriores, podemos traducirlo al siguiente código

Al codificar, debemos prestar atención a que cuando comenzamos a atravesar, cuando atravesamos el primer nodo, el valor predeterminado es 0, para garantizar que el valor del primer nodo se pueda asignar directamente a val

La codificación es la siguiente:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func helpdfs(node *TreeNode, val int) int {
    if node == nil{
        return 0
    }
    val = val <<  1 | node.Val
    if node.Left == nil && node.Right == nil{
        return val
    }
    return helpdfs(node.Left, val) + helpdfs(node.Right, val)
}
func sumRootToLeaf(root *TreeNode) int {
    return helpdfs(root, 0)
}
复制代码

4. Resumen:

De esta manera, la complejidad del tiempo es O(n) , porque necesitamos atravesar n nodos, y la complejidad del espacio también es O(n).No es sorprendente aquí, aunque no abrimos manualmente el O(n) espacio, pero si usamos la recursividad, necesitamos consumir espacio de pila, por lo que la complejidad del tiempo también es O (n)

Dirección del título original: 1022. Suma de números binarios desde la raíz hasta la hoja

Estoy aquí hoy, lo que he aprendido, si hay alguna desviación, corríjame

Bienvenido a me gusta, seguir, favorito

Amigos, su apoyo y aliento son la motivación para que yo persista en compartir y mejorar la calidad.

Bien, aquí está esta vez.

La tecnología es abierta, y nuestra mentalidad debe ser abierta. Acepta el cambio, vive bajo el sol y sigue adelante.

Soy el pequeño demonio Nezha , bienvenido a dar me gusta, seguir y coleccionar, hasta la próxima ~

おすすめ

転載: juejin.im/post/7103550735169617928