LeetCode No.437 Path Sum III

来源:互联网 发布:口风琴基础教程软件 编辑:程序博客网 时间:2024/05/20 03:40

You are given a binary tree in which each node contains an integer value.

Find the number of paths that sum to a given value.

The path does not need to start or end at the root or a leaf, but it must go downwards (traveling only from parent nodes to child nodes).

The tree has no more than 1,000 nodes and the values are in the range -1,000,000 to 1,000,000.

Example:

root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8      10     /  \    5   -3   / \    \  3   2   11 / \   \3  -2   1Return 3. The paths that sum to 8 are:1.  5 -> 32.  5 -> 2 -> 13. -3 -> 11
====================================================================================================================================

这道题目的大意是:找出二叉树中和为sum的所有路径(路径起点任意)

本节点路径值 = 本身 + (上一节点的路径值+本身),再利用深搜(DFS)或者宽搜(BFS)就行。

附上代码:

/** * 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 {public:    int pathSum(TreeNode* root, int sum) {        if ( root == NULL )            return 0 ;        int ans = 0 ;        vector < pair <TreeNode*,vector<int> > > v ;//节点,路径所有可能值        vector <int> num ( 1 , root -> val ) ;        v.push_back ( make_pair ( root , num ) ) ;        while ( ! v.empty() )        {            TreeNode* r = v.back().first ;            num = v.back().second ;            v.pop_back () ;            for ( int i = 0 ; i < num.size() ; i ++ )//找出所有符合条件的路径                if ( num[i] == sum )                    ans ++ ;            if ( r -> left )            {                int numb = r -> left -> val ;                vector <int> temp ( 1 , numb ) ;//路径值+=本身                for ( int i = 0 ; i < num.size() ; i ++ )//路径值+=上一节点的路径值+本身                    temp.push_back ( num[i] + numb ) ;                v.push_back ( make_pair ( r -> left , temp ) ) ;            }            if ( r -> right )            {                int numb = r -> right -> val ;                vector <int> temp ( 1 , numb ) ;//路径值+=本身                for ( int i = 0 ; i < num.size() ; i ++ )//路径值+=上一节点的路径值+本身                    temp.push_back ( num[i] + numb ) ;                v.push_back ( make_pair ( r -> right , temp ) ) ;            }        }        return ans ;    }};

 

0 0
原创粉丝点击