博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
113. Path Sum II
阅读量:7156 次
发布时间:2019-06-29

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

一、题目

  1、审题

  2、分析

    给出一棵二叉树,求从根到叶节点的所有节点值和为 sum 的路径的所有节点集合。

 

二、解答

  1、思路:

    方法一、  

      采用递归。

      深度优先遍历求出所有从根到叶节点的路径,将和为 sum 的进行记录。

public List
> pathSum(TreeNode root, int sum) { List
> resultList = new ArrayList
>(); List
targetList = new ArrayList
(); pathSum(root, sum, resultList, targetList); return resultList; } private void pathSum(TreeNode root, int sum, List
> resultList, List
targetList) { if(root == null) // 跳出条件 return; targetList.add(root.val); if(root.left == null && root.right == null && sum == root.val) { resultList.add(new ArrayList
(targetList)); targetList.remove(targetList.size()-1); return; } else { pathSum(root.left, sum - root.val, resultList, targetList); pathSum(root.right, sum - root.val, resultList, targetList); } targetList.remove(targetList.size()-1); }

 

  方法二、

   采用后续遍历的迭代方法,进行记录和为 sum 的所有路径。

   注意: pre 用于记录此右节点是否访问过,否则将陷入死循环。

public List
> pathSum3(TreeNode root, int sum) { List
> resultList = new ArrayList
>(); if(root == null) return resultList; List
targetList = new ArrayList<>(); // postOrder Stack
stack = new Stack<>(); int target = 0; TreeNode cur = root; TreeNode pre = null; while(cur != null || !stack.isEmpty()) { while(cur != null) { target += cur.val; targetList.add(cur.val); stack.push(cur); cur = cur.left; } cur = stack.peek(); if(cur.right != null && cur.right != pre) { cur = cur.right; continue; } if(cur.left == null && cur.right == null && target == sum) resultList.add(new ArrayList
(targetList)); targetList.remove(targetList.size()-1); target -= cur.val; stack.pop(); pre = cur; cur = null; } return resultList; }

 

转载于:https://www.cnblogs.com/skillking/p/9742403.html

你可能感兴趣的文章
导航菜单点击图片切换--jquery
查看>>
自定义Web框架
查看>>
netty入门04
查看>>
本地计算机 上的 MySQL 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。...
查看>>
调用系统拍照
查看>>
解方程
查看>>
Java——IO之常量及路径
查看>>
DKhadoop安装包下载与监控参数说明
查看>>
Linux-3.5-Exynos4412驱动分层分离
查看>>
Linux shell break、continue、exit、return的用法 及exit、return的区别
查看>>
手动实现 SpringMVC
查看>>
thinkphp 验证码的使用
查看>>
NSUserDefaults保存应用中的数据
查看>>
安装gevent错误/gevent/core.so: undefined symbol: event_global_current_base_ 的解决方案
查看>>
XML序列化点滴
查看>>
Android游戏与应用开发最佳学习路线图
查看>>
【转】NSJSONSerialization解析JSON数据
查看>>
POJ 3252 Round Numbers(数学问题)
查看>>
本地使用CVS
查看>>
模拟系统提示框
查看>>