• leetcode 437. Path Sum III


    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   1
    
    Return 3. The paths that sum to 8 are:
    
    1.  5 -> 3
    2.  5 -> 2 -> 1
    3. -3 -> 11

    思路:深度优先搜索,分别以root, root->left, root->right作为开始节点,计算下方是否有满足和为sum的路径。dfs用于统计个数。

     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11     void dfs(TreeNode* root, int sum, int &num) {
    12         if (root == NULL)
    13             return;
    14         if (sum == root->val)
    15             num++;
    16         dfs(root->left, sum - root->val, num);
    17         dfs(root->right, sum - root->val, num);
    18     }
    19 public:
    20     int pathSum(TreeNode* root, int sum) {
    21         if (root == NULL) {
    22             return 0;
    23         }
    24         int num = 0;
    25         dfs(root, sum, num);
    26         int left = pathSum(root->left, sum);
    27         int right = pathSum(root->right, sum);
    28         return num + left + right;
    29     }
    30 };
  • 相关阅读:
    MYSQL学习(二)
    Nginx学习总结(一)
    关于微服务架构的个人理解(一)
    深入理解Java虚拟机(二) : 垃圾回收
    深入理解Java虚拟机(一) 运行时数据区划分
    多线程系列之 线程安全
    多线程系列之 java多线程的个人理解(二)
    多线程系列之 Java多线程的个人理解(一)
    Java基础04—字符串
    Java基础03—流程控制
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/11431460.html
Copyright © 2020-2023  润新知