1. Encuentra el valor máximo en cada fila del árbol
Dada la raíz del nodo raíz de un árbol binario, encuentre el valor máximo de cada nivel en el árbol binario.
Entrada: raíz = [1,3,2,5,3,null,9]
Salida: [1,3,9]
Todavía escriba primero el recorrido del orden de las capas, pero el valor máximo de la capa actual debe guardarse durante el proceso de recorrido.
public List<Integer> largestValues(TreeNode root) {
if(root == null) return new ArrayList<Integer>();
List<Integer> res = new ArrayList<Integer>();
LinkedList<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(queue.size()>0){
int size = queue.size();
Integer max = Integer.MIN_VALUE;
for(int i=0;i<size;i++){
TreeNode temp = queue.remove();
max = Math.max(temp.val,max);
if(temp.left!=null) queue.add(temp.left);
if(temp.right!=null) queue.add(temp.right);
}
res.add(max);
}
return res;
}
2. Promedio de capas del árbol binario
637. Promedio de capas de un árbol binario
Dada la raíz del nodo raíz de un árbol binario no vacío, devuelva el valor promedio de cada capa de nodos en forma de matriz. Se aceptan respuestas dentro de 10-5 de la respuesta real.
Entrada: root = [3,9,20,null,null,15,7]
Salida: [3.00000,14.50000,11.00000]
Explicación: El promedio de la capa 0 es 3, el promedio de la capa 1 es 14.5, el promedio de la capa 2 El valor medio de las capas es 11.
Volviendo así [3, 14.5, 11] .
public List<Double> averageOfLevels(TreeNode root) {
List<Double> res = new ArrayList<>();
if(root == null) return res;
Deque<TreeNode> queue = new ArrayDeque<>();
queue.add(root);
while(queue.size()>0){
Double sum = 0.0;
int size = queue.size();
for(int i=0;i<size;i++){
TreeNode temp = queue.remove();
sum+=temp.val;
if(temp.left!=null) queue.add(temp.left);
if(temp.right!=null) queue.add(temp.right);
}
res.add(sum/size);
}
return res;
}
3. La vista correcta del árbol binario
La vista correcta de un árbol binario
Dada la raíz del nodo raíz de un árbol binario, imagínese parado en su lado derecho y devuelva los valores de nodo que se pueden ver desde el lado derecho en orden de arriba hacia abajo.
Entrada: [1,2,3, nulo, 5, nulo, 4]
Salida: [1,3,4]
3.1 Recorrido de secuencia de capas + registro del último elemento de cada capa
public List<Integer> rightSideView(TreeNode root) {
List<Integer> res = new ArrayList<>();
if(root == null) return res;
Deque<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(queue.size()>0){
int size = queue.size();
for(int i=0;i<size;i++){
TreeNode temp = queue.remove();
if(temp.left != null) queue.add(temp.left);
if(temp.right!=null) queue.add(temp.right);
// 记录每层最后一个元素
if(i==size-1){
res.add(temp.val);
}
}
}
return res;
}