栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

剑指offer-二叉树中和为某一值的路径C++实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指offer-二叉树中和为某一值的路径C++实现

剑指offer-二叉树中和为某一值的路径C++实现

原题链接

#include 
#include 

using namespace std;

struct TreeNode {
    TreeNode *left;
    TreeNode *right;
    int val;

    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

class Solution {
public:
    vector> FindPath(TreeNode *root, int expectNumber) {
        if (!root)return {};
        // 先序遍历
        dfs(root, expectNumber);
        return ans;
    }

    // 一维数组用于存放每个目标路径节点
    vector tmp;

    // 先序遍历搜索符合要求的节点
    void dfs(TreeNode *root, int x) {
        // 越过叶子节点时,回溯
        if (!root) return;
        // 储存每个遍历过的节点值
        tmp.emplace_back(root->val);
        // 寻找符合要求的路径
        x -= root->val;
        // 走到目标路径的叶节点时,将路径节点的一维数组存到结果数组中
        if (!root->left && !root->right && x == 0) {
            ans.emplace_back(tmp);
        }
        // 先左再右
        dfs(root->left, x);
        dfs(root->right, x);
        // 回溯前删除该节点,避免存储重复和错误的节点值
        tmp.pop_back();
    }

private:
    vector> ans;
};

思路:
先序遍历查找目标路径的节点存到一维数组中,若符合目标路径则使用二维数组存储,回溯时从一维数组中删掉当前节点即可。
时间复杂度O(N),空间复杂度O(N)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/656669.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号