Resumen 606 de la solución Likou: crear una cadena a partir de un árbol binario

Enlace del directorio:

Preguntas de programación de Likou - Resumen de la solución - Compartir + Grabación - CSDN Blog

Proyecto de cepillado síncrono de GitHub:

https://github.com/26 de septiembre/algoritmos de Java

https://github.com/26 de septiembre/algoritmos de Java

Enlace del título original: hebilla de fuerza


describir:

Debe usar un recorrido de preorden para convertir un árbol binario en una cadena que consta de paréntesis y números enteros.

Los nodos vacíos se representan con un par de paréntesis vacíos "()". Y debe omitir todos los pares de paréntesis vacíos que no afectan el mapeo uno a uno entre las cadenas y el árbol binario original.

Ejemplo 1:

Entrada: Árbol binario: [1,2,3,4]
       1
     / \
    2 3
   /    
  4     

Salida: "1(2(4))(3)"

Explicación: originalmente sería "1(2(4)())(3())", será "1(2(4))(3)"
después de omitir todos los pares de paréntesis vacíos innecesarios
.
Ejemplo 2:

Entrada: Árbol binario: [1,2,3,null,4]
       1
     / \
    2 3
     \  
      4 

Salida: "1(2()(4))(3)"

Explicación: Similar al primer ejemplo,
excepto que no podemos omitir el primer par de paréntesis para romper el mapeo uno a uno entre entrada y salida.

Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/construct-string-from-binary-tree Los
derechos de autor pertenecen a Leetcode.com. Para reimpresiones comerciales, comuníquese con la autorización oficial y para reimpresiones no comerciales, indique la fuente.

Ideas para resolver problemas:

* Ideas para resolver problemas: 
* La pregunta de hoy no está claramente descrita. Hay una regla menos, debe ser que el nodo izquierdo esté vacío, y cuando el nodo derecho no esté vacío, el nodo izquierdo debe registrarse como (). 
* Primero realice el recorrido de pedido anticipado de forma recursiva, use stringbuilder para registrar

Código:

public class Solution606 {
    public String tree2str(TreeNode root) {
        StringBuilder builder = new StringBuilder();
        search(root, builder);
        return builder.toString();
    }

    private void search(TreeNode root, StringBuilder builder) {
        if (root == null) {
            return;
        }
        builder.append(root.val);

        //左节点为空,右节点不为空时,左节点要记录成()
        if (root.left != null || root.right != null) {
            builder.append("(");
            search(root.left, builder);
            builder.append(")");
        }
        //右节点为空就不记录
        if (root.right != null) {
            builder.append("(");
            search(root.right, builder);
            builder.append(")");
        }
    }

}

Supongo que te gusta

Origin blog.csdn.net/AA5279AA/article/details/123592353
Recomendado
Clasificación