栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Leetcode Path Sum II

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Leetcode Path Sum II

题目名称:113 Path Sum II

难度:Medium

知识点:Recursion

解题思路:

这道题还是利用二叉树组的特性进行recursion求解。首先判断根节点是否为null,再判断左结点和右结点,他们两个的目标值都是原始值减去根节点的值,对于这两个子结点的子节点,recursion中传入的已经减掉根节点的目标值再减去他们各自作为根节点的值就可以了。还有一个注意的点是,我们可以一直root.left root.right定位到他们的子节点,但是此题是要返回正确的path的node的值组成的数组,这样的话,我们肯定需要新建立一个暂时数组来track路径上经历的值,既然我们只有一个数组来track,那我们肯定就要删除last index上的值达到回退的效果,需要回退的情况有两种,在我们达到叶子结点之后,检查完叶子结点之后需要删除掉,第二种情况是针对非叶子结点,在我们检查完一个中间节点的左右结点后,应该删除该中间结点,因为她已经不回参与到后面的path计算中。

Java 代码如下:


class Solution {
    public List> pathSum(TreeNode root, int targetSum) {
        List> result = new ArrayList>();
        List temp = new ArrayList();
        findPath(root, targetSum, result, temp);
        return result; 
    }
    
    public void findPath(TreeNode root, int target, List>result, List temp){
        if(root == null) return;
        temp.add(root.val);
        if(root.left == null && root.right == null){
            if(target == root.val){
                result.add(new ArrayList(temp));
            }
            temp.remove(temp.size()-1);
            return;
        }  
        findPath(root.left, target-root.val, result, temp);
        findPath(root.right, target-root.val, result, temp);
        temp.remove(temp.size()-1);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/332545.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号