剑指 Offer(第2版)面试题 34:二叉树中和为某一值的路径

剑指 Offer(第2版)面试题 34:二叉树中和为某一值的路径

剑指 Offer(第2版)面试题 34:二叉树中和为某一值的路径

题目来源:47. 二叉树中和为某一值的路径

解法1:深度优先搜索

从根节点开始深度优先搜索:

  1. 当搜索到空节点时,直接返回;
  2. 当 path 中所有元素的和已经超过 sum 时,说明该路径不行,直接返回;
  3. 当搜索到叶子节点时,如果数组 path 中所有元素的和 + 叶子节点的值等于目标和 sum 时,说明我们找到了一条和为 sum 的路径,将叶子节点值插入 path,再将 path 插入答案 paths 中;
  4. 将当前节点值插入数组 path,向左右子树分别继续深度优先搜索。

代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution
{
   
private:
    vector<vector<int>> paths;
public:
    vector<vector<int>> findPath(TreeNode *root, int sum)
    {
   
        if (root == nullptr)
            return {
   };
        vector<int> path;
        dfs(root, paths, path, sum);
        return paths;
    }
    void dfs(TreeNode *root, vector<vector<int>> &paths, vector<int> path, int sum)
    {
   
        if (root == nullptr)
            return;
        if (accumulate(path.begin(), path.end(), 0) > sum)
            return;
        if (root->left == nullptr && root->right == nullptr)
            if (accumulate(path.begin(), path.end(), 0) + root->val == sum)
            {
   
                path.push_back(root->val);
                paths.push_back(path);
                return;
            }
        path.push_back(root->val);
        if (root->left)
            dfs(root->left, paths, path, sum);
        if (root->right)
            dfs(root->right, paths, path, sum);
    }
};

复杂度分析:

时间复杂度:O()

空间复杂度:O()

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-17 04:50:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-17 04:50:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-17 04:50:03       82 阅读
  4. Python语言-面向对象

    2023-12-17 04:50:03       91 阅读

热门阅读

  1. Python简介、开发环境配置与工具准备

    2023-12-17 04:50:03       58 阅读
  2. 《C++新经典设计模式》之第1章 介绍

    2023-12-17 04:50:03       34 阅读
  3. 什么是npm?

    2023-12-17 04:50:03       55 阅读
  4. leetcode - 1665. Minimum Initial Energy to Finish Tasks

    2023-12-17 04:50:03       52 阅读
  5. 免杀-一句话的免杀

    2023-12-17 04:50:03       62 阅读
  6. android 检测u盘和sdcard

    2023-12-17 04:50:03       50 阅读
  7. 按位与例题

    2023-12-17 04:50:03       60 阅读
  8. 前段js解决文本框录入保留多位小数设置

    2023-12-17 04:50:03       42 阅读
  9. 重构第五章:重构的方法

    2023-12-17 04:50:03       47 阅读
  10. linux端口转发

    2023-12-17 04:50:03       56 阅读
  11. 【pyqt5制作悬浮且透明控件组】

    2023-12-17 04:50:03       56 阅读
  12. springboot整合redis并使用cache

    2023-12-17 04:50:03       52 阅读