Árbol binario OJ (dos) el camino I, II, III de un cierto valor en el árbol binario

El camino que suma un cierto valor en el árbol binario (1)

describir

Dada una raíz de árbol binario y una suma de valores, determine si existe una ruta cuya suma de valores de nodo desde el nodo raíz hasta el nodo hoja es igual a la suma.

1. La ruta de esta pregunta se define como el nodo desde el nodo raíz del árbol hasta el nodo hoja.

2. Un nodo hoja se refiere a un nodo sin nodos secundarios

3. La ruta solo puede ir del nodo principal al nodo secundario, no del nodo secundario al nodo principal.

4. El número total de nodos es n


Por ejemplo:
dado el siguiente árbol binario, sum=22 sum=22,


Devuelve verdadero porque hay un camino 5→4→11→25→4→11→2 y la suma de los valores de los nodos es 22

rango de datos:

1. El número de nodos en el árbol satisface 0≤n≤100000≤n≤10000

2. El valor de cada nodo satisface ∣val∣≤1000∣val∣≤1000

Requisitos: complejidad espacial O(n)O(n), complejidad temporal O(n)O(n)

Avanzado: Complejidad espacial O (altura del árbol) O (altura del árbol), complejidad temporal O(n)O(n)

[Solución 1] DFS

class Solution {
public:
    bool flag = false;
    void dfs(TreeNode* root, int sum)
    {
        if(root==nullptr)return;
        sum-=root->val;
        if(sum==0 && root->left==nullptr && root->right==nullptr)
        {
            flag = true;
            return;
        }
        dfs(root->left, sum);
        dfs(root->right, sum);
    }
    bool hasPathSum(TreeNode* root, int sum) {
        dfs(root, sum);
        return flag;
    }
};

 El camino cuya suma es un cierto valor en el árbol binario (2)

describir

Ingrese la raíz del nodo raíz de un árbol binario y un número esperado entero, y encuentre todas las rutas cuya suma de valores de nodo en el árbol binario sea número esperado.

1. La ruta de esta pregunta se define como el nodo desde el nodo raíz del árbol hasta el nodo hoja.

2. Un nodo hoja se refiere a un nodo sin nodos secundarios

3. La ruta solo puede ir del nodo principal al nodo secundario, no del nodo secundario al nodo principal.

4. El número total de nodos es n

Ejemplo 1

Entrada: {10,5,12,4,7},22

Valor devuelto: [[10,5,7],[10,12]] Explicación: Devolver [[10,12],[10,5,7]] también es correcto

class Solution {
public:
	vector<vector<int>>res;
	vector<int> temp;
	void dfs(TreeNode* root, int sum)
	{
		if(root==nullptr)return;
		sum-=root->val;
		temp.push_back(root->val);
		if(sum==0 && root->left==nullptr && root->right==nullptr)
		{
			res.push_back(temp);
		}
		dfs(root->left, sum);
		dfs(root->right, sum);
		sum+=root->val;    // 这里进行回溯还原
		temp.pop_back();
	}
    vector<vector<int>> FindPath(TreeNode* root,int expectNumber) {
        if(root == nullptr)return res;
		dfs(root, expectNumber);
		return res;
    }
};

El camino cuya suma es un cierto valor en el árbol binario (3)

describir

Dada una raíz de árbol binaria y una suma de valores enteros, encuentre el número de caminos en el árbol cuya suma de valores de nodo es igual a suma.

1. La definición de ruta de esta pregunta no necesita comenzar desde el nodo raíz, ni debe terminar en el nodo hoja, pero debe ser desde el nodo principal hasta el nodo secundario.

2. El número total de nodos es n

3. Asegúrese de que la cantidad de rutas devueltas al final esté dentro del rango de números enteros (es decir, la cantidad de rutas sea inferior a 231-1)

[Solución 1] Dos capas de anidamiento dfs

class Solution {
public:
    int res = 0;
    void dfs(TreeNode* root, int sum)
    {
        if(root == nullptr)
            return;
        sum-=root->val;
        if(sum==0)  // 注意这里,后续可能还会有中和的现象,所以不能直接剪枝
            res++;
        dfs(root->left, sum);
        dfs(root->right, sum);
        sum+=root->val;
    }
    int FindPath(TreeNode* root, int sum) {
        // write code here
        if(root==nullptr)return 0;
        dfs(root, sum);
        FindPath(root->left, sum);
        FindPath(root->right, sum);
        return res;
    }
};

Supongo que te gusta

Origin blog.csdn.net/weixin_66151870/article/details/129113629
Recomendado
Clasificación