题目描述

给定一个二叉树和一个值sum,请找出所有的根节点到叶子节点的节点值之和等于sum 的路径,
例如:
给出如下的二叉树,sum=22,

返回
[
[5,4,11,2],
[5,8,9]
]

示例1

输入

{1,2},1

返回值

[]

示例2

输入

{1,2},3

返回值

[[1,2]]

思路:使用递归

  1. 从根节点开始,遍历每一个结点(深度优先遍历),将该结点的值放入当前ArrayList中

  2. 判断当前结点是否为叶子结点 以及 当前的路径和是否与sum相等

  3. 步骤2中的两个条件都满足时,则将list加入到结果集中。否则回退,删除list的最后一个元素(该元素可能不是叶节点,也可能当前路径不等于sum)

import java.util.ArrayList;public class TreeNodePutSum {private ArrayList<ArrayList<Integer>> allList = new ArrayList();public static void main(String[] args) {}/**** @param root TreeNode类* @param sum int整型* @return int整型ArrayList<ArrayList<>>*/public ArrayList<ArrayList<Integer>> pathSum (TreeNode root, int sum) {// 树空if(root==null){return allList;}//1.初始当前的列表ArrayList<Integer> pathList = new ArrayList();// 2.深度优先遍历dfs(allList,pathList,root,sum);//3.返回路径集合return allList;}//一、对root进行深度优先遍历//result:所有路径和为sum的结果集  list:当前路径结点集  root:当前根节点  sum:当前所需的路径和public void dfs(ArrayList<ArrayList<Integer>> allList,ArrayList<Integer> pathList, TreeNode root, int sum){if(null == root){return;}if(null == root.left && null == root.right){//为叶子节点if(sum - root.val == 0){//加上该结点后,满足路径和sumpathList.add(root.val);//将当前结点加入listallList.add(new ArrayList<>(pathList));//将当前路径 加入 结果集pathList.remove(pathList.size()-1);//去掉当前结点,继续下面的遍历}return;}pathList.add(root.val);dfs(allList,pathList, root.left, sum-root.val);dfs(allList,pathList, root.right, sum-root.val);pathList.remove(pathList.size()-1);}
}

常考数据结构与算法----给定一个二叉树和一个值 sum,请找出所有的根节点到叶子节点的节点值之和等于sum 的路径,相关推荐

  1. 常考数据结构与算法:求二叉树的层序遍历

    题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树层序遍历的结果是 [ [3], [9,20], ...

  2. 常考数据结构与算法:输出二叉树的右视图

    题目描述 请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图 上图树的右视图为:{1,4,3,7} 做此题之前可以先做下面3道题: 1. 常考数据结构与算法:求二叉树的层序遍历 2.常 ...

  3. 《剑指offer》给定一颗二叉搜索树,请找出其中的第k大的结点。

    题目:给定一颗二叉搜索树,请找出其中的第k大的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. 解析:看到我写的下面的代码,像一篇文章一样的长, ...

  4. 常考数据结构与算法:二叉树的之字形层序遍历

    题目描述 给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树之字形层序遍历的结果是 [ ...

  5. 常考数据结构与算法:判断二叉树是否对称(迭代法,递归法)

    给定一棵二叉树,判断琪是否是自身的镜像(即:是否对称) 例如:下面这棵二叉树是对称的      1     /  \   2    2  / \    / \ 3 4  4  3 下面这棵二叉树不对称 ...

  6. 常考数据结构与算法:二叉树的镜像

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \. 6 10 / \ / \. 5 7 9 11 镜像二叉树 8 / \. 10 6 / \ ...

  7. 常考数据结构与算法:重建二叉树

    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5 ...

  8. 常考数据结构与算法:删除链表的倒数第n个节点

    题目描述 给定一个链表,删除链表的倒数第n个节点并返回链表的头指针 例如, 给出的链表为:1->2->3->4->5, n= 2.删除了链表的倒数第n个节点之后,链表变为1-& ...

  9. 常考数据结构与算法:数组中相加和为0的三元组

    题目描述 给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组. 注意: 三元组(a.b.c)中的元素必须按非降序排列.(即a≤b≤c) 解集中不能 ...

最新文章

  1. Raspberry Pi 2 Model B Pi4J 示例
  2. java基础:12.7 对象流 ObjectInputStream、ObjectOutputStream
  3. 论文解读丨图神经网络应用于半结构化文档的命名实体识别和关系提取
  4. Redis:使用Redis的分布式锁
  5. mysql读写分离错_MySQL主从同步、读写分离配置步骤、问题解决
  6. html区域背景,保存/恢复HTML5 Canvas的背景区域
  7. 解决flash的虚框问题
  8. highcharts饼图
  9. c语言作业百万富翁for循环做,c语言例题(c语言经典例题100道pdf)
  10. php 论坛下载,PHPWind论坛社区
  11. 火星坐标-84坐标-百度地图坐标相互转换
  12. HbuilderX 运行到小程序模拟器
  13. 详解VB对话框InputBox和MsgBox
  14. Samba:centos服务器之间相互共享文件夹,可以用win10连接共享文件夹,并可以使用Docker部署
  15. 水浒108将(按出场顺序)
  16. dede taglist模板中调用自定义字段
  17. jQuery是什么?
  18. 暴力枚举——妖梦拼木棒
  19. 嵌入式与卫星导航定位上位机软件开发(基于MFC框架)
  20. 基于 Springboot 的车辆租赁网站的设计与实现

热门文章

  1. 线程的创建 验证线程之间共享数据 守护线程 线程进程效率对比 锁 死锁 递归锁...
  2. 最小生成树之克鲁斯卡尔(Kruskal)算法
  3. python学习笔记---字符串
  4. 《神秘的程序员们》漫画47:这些年你读过的书
  5. mybatis 复习笔记02
  6. osgi实战学习之路:8. Service-3之ServiceTracker
  7. android 开发时遇到的各种问题1--Android双模(CDMA/GSM)手机短信相关
  8. WordPress备份的七种办法
  9. 简易的阻尼滚动条的插件
  10. [Flex][总结]从页面url获取参数