Path Sum II

来源:互联网 发布:json key value 数组 编辑:程序博客网 时间:2024/05/21 07:53

Desciption:

Given a binary tree and a sum, find all root-to-leaf paths where each path’s sum equals the given sum.
For example: Given the below binary tree and sum = 22,

这里写图片描述

return

这里写图片描述

代码:

#include <iostream>#include <vector>#include <stack>#include <algorithm>#define Elementype intusing namespace std;int index = 0;typedef struct TreeNode //树结点{    Elementype  val;    TreeNode *left;    TreeNode *right;    TreeNode(Elementype x) : val(x), left(nullptr), right(nullptr) {}} *Tree;//使用先序遍历创建创建二叉树void MakeBinaryTree(Tree &T, Elementype value[]){    Elementype  c = value[index++];    if (c == '#')        T = nullptr;    else    {        T = new TreeNode(c);        MakeBinaryTree(T->left, value);        MakeBinaryTree(T->right, value);    }}//先序遍历void preOrderTraversal(Tree root){    stack<Tree> sk;    Tree p = root;    if (p)        sk.push(p);    while (!sk.empty())    {        p = sk.top();        cout << p->val<<" ";        sk.pop();        if (p->right)            sk.push(p->right);        if (p->left)            sk.push(p->left);    }}void pathSum(Tree root, int sum, vector<vector<int>> &result, vector<int> curVec){    if (!root)        return;    curVec.push_back(root->val);    if (root->left == nullptr && root->right == nullptr && sum == root->val)        result.push_back(curVec);    pathSum(root->left, sum - root->val, result, curVec);    pathSum(root->right, sum - root->val, result, curVec);}vector<vector<int>> pathSum(Tree root, int sum){    vector<vector<int>> result;     //保存结果    vector<int> curVec;             //当前查找的路径    pathSum(root, sum, result, curVec);    return result;}int main(){    Tree root = nullptr;        //根结点    Elementype data[] = { 5, 4, 11, 7,'#','#',2,'#','#','#', 8, 13, '#', '#', 4, 5,'#','#', 1,'#','#'};    MakeBinaryTree(root, data);    cout << "先序遍历: ";    preOrderTraversal(root);    cout << endl;    int sum = 22;    vector<vector<int>> path = pathSum(root, sum);    for (auto i : path)    {        cout << "路径有: ";        for (auto j : i)            cout << j << " ";        cout << endl;    }    system("pause");    return 0;}

测试:

这里写图片描述

0 0
原创粉丝点击