博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode:路径总和II【113】
阅读量:5172 次
发布时间:2019-06-13

本文共 1317 字,大约阅读时间需要 4 分钟。

LeetCode:路径总和II【113】

题目描述

给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。

说明: 叶子节点是指没有子节点的节点。

示例:

给定如下二叉树,以及目标和 sum = 22

5             / \            4   8           /   / \          11  13  4         /  \    / \        7    2  5   1

返回:

[   [5,4,11,2],   [5,8,4,5]]

题目分析

  首先是一个深度搜索,来把所有根节点到叶子节点的路径找出来,然后各自判断是否等于目标值,等于目标值的路径加入结果集中。这种思路是没有问题的,我也很快就写出来了,但是我总觉得递归结束条件太过于简单,但是如果不到叶子节点而中途结束的话,就会忽略一些测试案列。比如到某一节点已经等于目标值,但它不是叶子节点,然而还有可能它的叶子节点值为0对吧,那这也是一条路径,不能忽略。

Java题解

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */class Solution {    public List
> pathSum(TreeNode root, int sum) { List
> ans = new ArrayList<>(); DFS(ans,new ArrayList<>(),root,sum,sum); return ans; } public void DFS(List
> ans,List
tmpList,TreeNode node,int sum,int remain) { //递归结束条件 if(node==null) return; //业务逻辑处理 tmpList.add(node.val); remain=remain-node.val; if(remain==0&&node.left==null&&node.right==null){ ans.add(tmpList); return; } DFS(ans,new ArrayList<>(tmpList),node.left,sum,remain); DFS(ans,new ArrayList<>(tmpList),node.right,sum,remain); }}

  

 

转载于:https://www.cnblogs.com/MrSaver/p/9956598.html

你可能感兴趣的文章
C#里如何遍历枚举所有的项
查看>>
如何在键盘出现时滚动表格,以适应输入框的显示
查看>>
超级强大的鼠标手势工具
查看>>
常用Dockerfile举例
查看>>
jquery的ajax用法
查看>>
设计模式-策略模式(Strategy)
查看>>
django orm 数据查询详解
查看>>
JarvisOJ Basic 熟悉的声音
查看>>
C# list导出Excel(二)
查看>>
CAS 单点登录模块学习
查看>>
Android应用开发-网络编程①
查看>>
input中的name,value以及label中的for
查看>>
静态库制作-混编(工程是oc为基础)
查看>>
jQuery 显示加载更多
查看>>
Confluence 6 系统运行信息中的 JVM 内存使用情况
查看>>
Confluence 6 升级以后
查看>>
用JS实现版面拖拽效果
查看>>
二丶CSS
查看>>
《avascript 高级程序设计(第三版)》 ---第二章 在HTML中使用Javascript
查看>>
JS一些概念知识及参考链接
查看>>