LeetCode //C - 199. Vista lateral derecha del árbol binario

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:

Insertar descripción de la imagen aquí

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:
  1. Utilice una cola para realizar un seguimiento de los nodos en el nivel actual.
  2. Para cada nivel, ponga en cola los hijos izquierdo y derecho de los nodos del nivel anterior.
  3. 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.
  4. 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;
}

Supongo que te gusta

Origin blog.csdn.net/navicheung/article/details/132868177
Recomendado
Clasificación