leetcode todos los caminos 257 Binary Tree

árbol binario? Para encontrar el camino!

Título
Dado un árbol binario, todos los caminos desde el nodo raíz para devolver los nodos hoja.
Descripción: nodo hoja es un nodo no tiene nodos secundarios.

Ejemplos
de entrada:
-1
- / - \
2 - 3
-
\ -5
salida: [ "1-> 2-> 5", "1 -> 3 ']
Explicación: todo el nodo raíz a la ruta de nodos de hoja: 1- > 2-> 5, 1-> 3

tema de análisis

  • Punto de partida: la raíz
  • Fin: nodo hoja
  1. A partir de la raíz

  2. Dar un paso adelante para llegar a un nuevo nodo

  3. Sólo tiene que buscar la ruta al nodo actual a un nodo de hoja lata

    ==> Ir Repetir 2 y 3 hasta que los nodos hoja

    Recursiva!

Ideas de resolución de problemas

función efecto
encontrar() Mirando vía de función recursiva

Procesar
la ruta de nodo que se une actual

  • Si los subárboles izquierdo y derecho están vacías - el nodo actual es un nodo hoja - para encontrar un camino
  • Si el subárbol izquierdo no está vacía - encontrar el camino de la izquierda nodo secundario a un nodo hoja
  • Si el subárbol derecho no está vacía - encontrar el nodo hijo camino correcto para un nodo hoja

Código es el siguiente

void find (TreeNode* now,string path, vector<string> &ans)
 {
    string temp = to_string(now->val);
    if(path=="") path = path + temp;                                 //注意路径的开头不用添加 '->'
    else path = path +'-'+'>' + temp;
    if (!now->left && !now->right) ans.push_back(path);              //路径加入答案
    if(now->left) find(now->left,path,ans);
    if(now->right) find(now->right,path,ans);
 }
class Solution {
public:
    vector<string> binaryTreePaths(TreeNode* root) {
        if(!root) return {};
        string path;
        vector<string> ans;
        find(root, path, ans);
        return ans;
    }
};
Publicado 34 artículos originales · ganado elogios 0 · Vistas 578

Supongo que te gusta

Origin blog.csdn.net/Luyoom/article/details/104825650
Recomendado
Clasificación