Leetcode113. Path Sum II
来源:互联网 发布:网络弊大于利总结陈词 编辑:程序博客网 时间:2024/06/06 14:27
题目:找出从根节点到叶节点的路径中各节点值之和为sum的所有路径,并返回。
思路:用数组nodeList保存从根节点到现在节点的 路径中的节点。再用flagList来保存每个节点的遍历情况,0表示对应的节点只遍历了左节点,1表示已经遍历了左节点和右节点,再一次过来就可以删除了。思路很简单,下面是代码。
我的leetcode的所有代码已经放入github:https://github.com/gaohongbin/leetcode
代码:
/** * 5 * / \ * 4 8 * / / \ * 11 6 7 * * @author hongbin.gao * */public class Leetcode113 {public static void main(String[] args){TreeNode head = new TreeNode(5);TreeNode p1 = new TreeNode(4);TreeNode p2 = new TreeNode(8);TreeNode p3 = new TreeNode(11);TreeNode p4 = new TreeNode(6);TreeNode p5 = new TreeNode(7);head.left = p1; head.right = p2;p1.left =p3; p1.right = null;p2.left = p4; p2.right = p5;p3.left = p3.right = null;p4.left = p4.right = null;p5.left = p5.right = null;int sum = 20;List<List<Integer>> list = pathSum(head, sum);System.out.println(list);} public static List<List<Integer>> pathSum(TreeNode root, int sum) { List<List<Integer>> list = new ArrayList<List<Integer>>(); //最终返回的结果 List<Integer> subList; if(root == null) return list; List<TreeNode> nodeList = new ArrayList<TreeNode>(); //栈用来保存节点 List<Integer> flagList = new ArrayList<Integer>(); //占用来保存标识,0表示该节点只遍历了左子树,1表示已经遍历了右子树。 TreeNode p = root; while(!nodeList.isEmpty() || p!=null){ if(p==null){ //p为null int flag = flagList.get(flagList.size()-1); while(flag==1 && nodeList.size()>=1){ sum += nodeList.remove(nodeList.size()-1).val; //弹出树节点。并修改sum flagList.remove(flagList.size()-1); if(flagList.isEmpty()) return list; flag = flagList.get(flagList.size()-1); //取最上面的标识,看是不是要继续弹出 } p = nodeList.get(nodeList.size()-1).right; //当flag为0时,取其右节点 flagList.set(flagList.size()-1,1); //将要访问右节点,所以换标示 } else if(p.left == null && p.right ==null){ //p为叶节点 nodeList.add(p); //加入叶子节点 flagList.add(1); //因为是叶子节点,所以直接标识为1 sum -= p.val; //修改sum p = null; //p==null,会从nodeList弹出节点 if(sum == 0){ subList = new ArrayList<Integer>(); for(int i=0;i<nodeList.size();i++){ subList.add(i, nodeList.get(i).val); //完成subList } list.add(subList); //将subList加入list } } else{ //p为普通节点 sum -= p.val; nodeList.add(p); flagList.add(0); p = p.left; } } return list; }}
0 0
- LeetCode113 Path Sum II
- Leetcode113. Path Sum II
- LeetCode113:Path Sum II
- LeetCode113. Path Sum II
- LeetCode113. Path Sum II
- leetcode113~Path Sum II
- LeetCode113 Path Sum II
- leetcode113. Path Sum II
- leetcode113. Path sum II
- LeetCode113. Path Sum II
- LeetCode113—Path Sum II
- LeetCode113. Path Sum II(Medium)
- LeetCode: Path Sum II
- LeetCode Path Sum II
- [Leetcode] Path Sum II
- LeetCode: Path Sum II
- Path Sum II
- [LeetCode] Path Sum II
- Android7.0 数据业务中的短连接
- java 根据当前日期获取本周或上周日期区间
- 关于BCD编码和解码
- node.js简介
- c++ 设计模式之命令(Command)模式
- Leetcode113. Path Sum II
- 简单理解 分布式跟集群
- new install windows to do
- ACM常用算法分类
- Android 标题栏
- Delphi列表框组件(TListBox)详解
- Android 自定义view步骤
- Ajax中模拟注册效果
- [32] Vijos P1752 潜伏者(模拟,字符串)