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(")");
}
}
}