199. Vista lateral derecha del árbol binario
Dada la raíz de un árbol binario, imagínate parado en el lado derecho de él, devuelve los valores de los nodos que puedes ver ordenados de arriba a abajo.
Ejemplo 1:
Entrada: raíz = [1,2,3,nulo,5,nulo,4]
Salida: [1,3,4]
Ejemplo 2:
Entrada: raíz = [1,nulo,3]
Salida: [1,3]
Ejemplo 3:
Entrada: raíz = []
Salida: []
Restricciones:
- El número de nodos en el árbol está en el rango [0, 100].
- -100 <= Valor.nodo <= 100
De: LeetCode
Enlace: 199. Vista lateral derecha del árbol binario
Solución:
Ideas:
- Utilice una cola para realizar un seguimiento de los nodos en el nivel actual.
- Para cada nivel, ponga en cola los hijos izquierdo y derecho de los nodos del nivel anterior.
- Para cada nivel, el último nodo retirado de la cola es el nodo más a la derecha y, por lo tanto, es visible desde el lado derecho.
- Almacene el valor del nodo más a la derecha para cada nivel en el resultado.
Código:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* rightSideView(struct TreeNode* root, int* returnSize) {
if (!root) {
*returnSize = 0;
return NULL;
}
// Define a queue for BFS
struct TreeNode* queue[101];
int front = 0, rear = 0;
queue[rear++] = root;
int* result = (int*)malloc(100 * sizeof(int));
*returnSize = 0;
while (front < rear) {
int levelSize = rear - front;
for (int i = 0; i < levelSize; ++i) {
struct TreeNode* currentNode = queue[front++];
// If this is the last node in the current level, add its value to the result
if (i == levelSize - 1) {
result[(*returnSize)++] = currentNode->val;
}
// Enqueue left and right children
if (currentNode->left) queue[rear++] = currentNode->left;
if (currentNode->right) queue[rear++] = currentNode->right;
}
}
return result;
}