zoukankan      html  css  js  c++  java
  • leetcode 437. 路径总和 III

    给定一个二叉树,它的每个结点都存放着一个整数值。

    找出路径和等于给定数值的路径总数。

    路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。

    二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。

    示例:

    root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8
    
          10
         /  
        5   -3
       /     
      3   2   11
     /    
    3  -2   1
    
    返回 3。和等于 8 的路径有:
    
    1.  5 -> 3
    2.  5 -> 2 -> 1
    3.  -3 -> 11

    思路:
    • 用两次dfs(),dfs()用来找从一个结点延伸出的,且路径等值等于sum的路径条数,dfs1()用来遍历每一个结点
    • 两个dfs函数叠加使用就可以求出题中要求
     1 class Solution {
     2 public:
     3     void dfs(TreeNode* root, int sum, int& cnt){
     4         if(root == NULL) return;
     5         if(root->val == sum) cnt++;
     6         dfs(root->left, sum-root->val, cnt);
     7         dfs(root->right, sum-root->val, cnt);
     8     }
     9     
    10     void dfs1(TreeNode* root, int sum, int& cnt){
    11         if(root == NULL) return;
    12         dfs(root, sum, cnt);
    13         dfs1(root->left, sum, cnt);
    14         dfs1(root->right, sum, cnt);
    15     }
    16     int pathSum(TreeNode* root, int sum) {
    17         int cnt = 0;
    18         dfs1(root, sum, cnt);
    19         return cnt;
    20     }
    21 };
    有疑惑或者更好的解决方法的朋友,可以联系我,大家一起探讨。qq:1546431565
  • 相关阅读:
    vs中无法找到头文件
    c++ vector 用法
    c++ queue 用法
    c++ 中 毫秒级时间获取
    vs2013 boost signals
    vs2013环境下boost配置
    C++ static 用法
    fopen()和fclose()
    删除字符串尾的回车符
    WaitForSingleObject()
  • 原文地址:https://www.cnblogs.com/mr-stn/p/8970122.html
Copyright © 2011-2022 走看看