zoukankan      html  css  js  c++  java
  • 面试题 04.12. 求和路径

     方法一:暴力搜索

    class Solution {
        private int res = 0;
        public int pathSum(TreeNode root, int sum) {
            order(root,sum);
            return res;
        }
    
        public void order(TreeNode root,int sum) {
            if(root == null) return ;
            dfs(root,sum);
            order(root.left,sum);
            order(root.right,sum);
            
        }
    
        public void dfs(TreeNode root, int sum) {
            if(root == null) return;
            if(sum - root.val == 0) res++;
            dfs(root.left,sum - root.val);
            dfs(root.right,sum - root.val);
        }
    }

    方法二:记录每个节点的前缀和

    class Solution {
    
        public int pathSum(TreeNode root, int sum) {
            
            Map<Integer,Integer> map = new HashMap<>();  // 存放每个节点的前缀和,即之前所有父节点的和
            map.put(0,1); // 到根节点的情况
            return helper(root, map, sum, 0);
        }
    
        public int helper(TreeNode root, Map<Integer,Integer> map, int sum, int curSum) {
            if(root == null) return 0;
    
            curSum += root.val;
            int count = map.getOrDefault(curSum-sum,0); // 如果节点a的前缀和为curSum-sum那么节点a到当前节点的和为sum
    
            map.put(curSum,map.getOrDefault(curSum,0)+1); // 本层前缀和会影响下一层的判断,进入下一层要加入map
            count += helper(root.left,map,sum,curSum);
            count += helper(root.right,map,sum,curSum);
            map.put(curSum,map.get(curSum)-1); // 本层节点前缀和和上一层的没有关系,返回上一层时要移除掉
            return count;
        }
    
    }
  • 相关阅读:
    centos7安装ELS7.2.1
    简单搭建es环境并配置keyword检索
    拦截器执行顺序及查看方法
    JPA同时支持精准搜索和模糊搜索
    Vue开发之devtools
    Linux配置本地yum源
    Nginx编译安装
    VS2017 DUMP文件调试
    磁共振序列相关知识点记录
    C#高级编程笔记(一)
  • 原文地址:https://www.cnblogs.com/yonezu/p/13324770.html
Copyright © 2011-2022 走看看