Path Sum

来源:互联网 发布:java程序员的浪漫代码 编辑:程序博客网 时间:2024/05/17 04:29

Description:

Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the
values along the path equals the given sum.
For example: Given the below binary tree and sum = 22,

这里写图片描述

return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.

代码:

#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);    }}bool pathSum(Tree root, int sum){    if (!root)         return false;    if (root->left == nullptr && root->right == nullptr)    //叶子结点        return sum == root->val;    return pathSum(root->left, sum - root->val) || pathSum(root->right, sum - root->val);}int main(){    Tree root = nullptr;        //根结点    Elementype data[] = { 5, 4, 11, 7,'#','#',2,'#','#','#', 8, 13, '#', '#', 4, '#', 1,'#','#'};    MakeBinaryTree(root, data);    cout << "先序遍历: ";    preOrderTraversal(root);    cout << endl;    int sum = 22;    cout << boolalpha << pathSum(root, sum)<<endl;    system("pause");    return 0;}

测试:

这里写图片描述

0 0