[Oferta de dedo de espada] _10 La suma del árbol binario es un cierto valor de ruta

Descripción del título

Ingrese el nodo del talón y un número entero de un árbol binario e imprima todas las rutas donde la suma de los valores del nodo en el árbol binario es el número entero de entrada. La ruta se define como una ruta que comienza desde el nodo raíz del árbol y baja al nodo hoja.

Ideas para resolver problemas

Si se requiere la suma de una ruta, entonces la condición de terminación inevitable es el nodo hoja. Comenzando desde el nodo raíz, de izquierda a derecha, la suma de cada ruta se compara con el valor dado, que se puede encontrar naturalmente.
Pero a menudo el problema de los árboles binarios utilizará la recursividad, que es en sí misma un árbol binario, entonces el subárbol debe ser un árbol binario, si encuentra la ley. ?
Podemos pensar de esta manera, recursiva una vez, la antigua pila del sistema de llamadas guarda datos una vez. Dado que la suma de todos los nodos en la ruta es igual al valor dado, significa que la suma del valor dado menos la ruta es igual a 0 . No es difícil pensar que cada vez que el valor del nodo raíz actual se resta de forma recursiva, hasta el nodo hoja, si el último valor es igual al valor del nodo hoja, entonces este problema puede resolverse .
Tenemos que considerar el caso especial, si el árbol binario tiene un solo nodo, y sucede que el valor de ese nodo es igual al valor dado? ? Por lo tanto, antes de restar el valor del nodo raíz actual cada vez, primero determine si son iguales y luego reste .
Si los nodos de la hoja no son iguales, sube y luego ve a la derecha .
Con las ideas anteriores, no es difícil escribir el siguiente código

Implementación de código

class Solution {
    vector<vector<int>> result;
    vector<int>  path;
public:
    void find(TreeNode* root,int expectnum)
    {
        if(root == NULL)
            return ;
        path.push_back(root->val);
        if(!root->left&&!root->right&& expectnum == root->val)
            result.push_back(path);
        else
        {
            if(root->left)
                find(root->left,expectnum-root->val);
            if(root->right)
                find(root->right,expectnum-root->val);
        }
        path.pop_back();
    }
    
    vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
        find(root,expectNumber);
        return result;
    }
};
Sol
Publicado 253 artículos originales · elogiado 41 · 40,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/liuyuchen282828/article/details/103767558
Recomendado
Clasificación