á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
-
A partir de la raíz
-
Dar un paso adelante para llegar a un nuevo nodo
-
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;
}
};