zoukankan      html  css  js  c++  java
  • 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

    从任意一点dfs, 和dfs return 当前, 左节点, 右节点的模板

    The basic idea is to subtract the value of current node from sum until  the subtraction equals 0, then we know that we got a path. and because the start node can be any node, so we should add the return value from its subtree. /**

     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public int pathSum(TreeNode root, int sum) {
            if(root==null) return 0;
            //helper(root,sum) 当前节点开始
            //pathSum(root.left,sum) 当前节点左节点开始
            //pathSum(root.right,sum) 当前节点右节点开始
            return helper(root,sum)+pathSum(root.left,sum)+pathSum(root.right,sum);
           
        }
        private int helper(TreeNode root,int sum){
           if(root==null) return 0;
           int count=0;
           if(root.val==sum) count++;
           return count+helper(root.left,sum-root.val)+helper(root.right,sum-root.val);
        }
    
    }
    

    要学会从任意节点遍历+ 分治法(后序遍历)

    当前节点是否满足题意加上左子树和右子树的结果值
    return count+helper(root.left,sum-root.val)+helper(root.right,sum-root.val);

      

  • 相关阅读:
    前端事件系统(四)
    前端事件系统(三)
    前端事件系统(二)
    前端事件系统(一)
    前端图片选择问题
    浅谈前端移动端页面开发(布局篇)
    诙谐论设计模式(一)——创建型设计模式
    总结三年未满的工作经历,写下自己对技术的坚持
    java内存优化牛刀小试
    将上下文融入知识图谱以进行常识推理
  • 原文地址:https://www.cnblogs.com/apanda009/p/7233620.html
Copyright © 2011-2022 走看看