📜  门| GATE-CS-2007 |第 78 题(1)

📅  最后修改于: 2023-12-03 15:28:43.171000             🧑  作者: Mango

介绍 GATE-CS-2007 第 78 题

本题为 GATE-CS-2007 的第 78 题,是一道考察数据结构和算法知识的编程题。

题目描述

题目描述如下:

给定一棵二叉树和一个权值,找出二叉树中所有从根节点到叶节点的路径中,权值和等于给定权值的路径。

解题思路

该题可以使用深度优先搜索(DFS)的方法来解决。从根节点开始遍历树,记录当前路劲上的节点的值之和,如果当前节点为叶节点且路径和等于给定权值,则输出该路径。

具体实现方法为,首先定义一个递归函数,该函数的参数包括当前节点指针、当前路径和、给定权值以及当前路径。如果当前节点为空,则直接返回。否则,先将该节点的值加入当前路径,然后判断是否为叶节点。如果是叶节点且路径和等于给定权值,则输出当前路径。最后,递归遍历当前节点的左子树和右子树,更新当前路径和和当前路径。

具体代码实现如下:

void findPath(Node* node, int currentSum, int targetSum, vector<int>& path) {
    if (!node) {
        return;
    }
    currentSum += node->val;
    path.push_back(node->val);
    if (!node->left && !node->right && currentSum == targetSum) {
        for (int i = 0; i < path.size(); i++) {
            cout << path[i] << " ";
        }
        cout << endl;
    }
    findPath(node->left, currentSum, targetSum, path);
    findPath(node->right, currentSum, targetSum, path);
    path.pop_back();
}
总结

本题考察了对二叉树和深度优先搜索的掌握程度,同时需要考虑多种情况,如空节点、叶节点等。通过学习本题,可以更深入地理解深度优先搜索算法的实现。