[Revisión] 199. Vista derecha de un árbol binario: dado un árbol binario, imagínese de pie en el lado derecho del mismo y, en el orden de arriba a abajo, devuelva los valores de los nodos que se pueden ver desde el lado derecho. .

Asunto: 199. Vista derecha del árbol binario

Dado un árbol binario, imagínese de pie en el lado derecho de él y devuelva los valores de nodo que se pueden ver desde el lado derecho en orden de arriba hacia abajo.
Inserte la descripción de la imagen aquí

responder:

Método 1: Búsqueda en profundidad primero
Idea:
Realizamos una búsqueda en profundidad en el árbol En el proceso de búsqueda, siempre visitamos primero el subárbol correcto. Luego, para cada capa, el primer nodo que vemos en esta capa debe ser el nodo más a la derecha.
Algoritmo: De
esta forma podemos almacenar el primer nodo de cada visita en profundidad, una vez que conocemos el número de niveles del árbol, podemos obtener el resultado final de la matriz.

// 深度优先搜索 depth-first search
typedef struct TreeNode TreeNode;

// 通过“深度优先搜索”得到returnSize,max_depth
// d用来更新max_depth的值
void dfs(TreeNode* root, int d, int* max_depth, int* ans, int* returnSize)
{
    
    
    if (root==NULL)
        return;
    if (d > *max_depth)
    {
    
    
        *(ans + (*returnSize)++) = root->val;
        *max_depth = d;
    }
    dfs(root->right, d + 1, max_depth, ans, returnSize);
    dfs(root->left,  d + 1, max_depth, ans, returnSize);
}

int* rightSideView(TreeNode* root, int* returnSize)
{
    
    
    int* ans = malloc(sizeof(int) * 1e4);
    *returnSize = 0;
    int max_depth = -1;
    dfs(root, 0, &max_depth, ans, returnSize);
    return ans;
}

Método 2: Amplitud Primera
idea de búsqueda :
Podemos atravesar el árbol binario jerárquicamente, por lo que para cada capa, el nodo más a la derecha debe ser el último en ser atravesado. El recorrido de nivel del árbol binario se puede realizar mediante la primera búsqueda en amplitud.
Algoritmo:
Realizamos una primera búsqueda de amplitud, el nodo izquierdo se ordena antes que el nodo derecho, de manera que recorremos cada capa de izquierda a derecha. Por lo tanto, al mantener solo el último nodo visitado de cada profundidad, podemos obtener el nodo más a la derecha de cada profundidad después de atravesar el árbol completo. Aparte de cambiar la pila a una cola y eliminar el cheque antes de rightmost_value_at_depth, el algoritmo no tiene otros cambios.

Supongo que te gusta

Origin blog.csdn.net/m0_46613023/article/details/114022107
Recomendado
Clasificación