剑指offer-二叉树中和为某一值的路径
2016-10-28 21:53
429 查看
题目描述
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
思路
通过先序遍历树节点,通过栈的方式来回溯
解法一:简化
解法二:书上版本
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
思路
通过先序遍历树节点,通过栈的方式来回溯
解法一:简化
package demo1; import java.util.ArrayList; import java.util.Stack; class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } public class SolutionDemo { private ArrayList<Integer> list = new ArrayList<Integer>(); // 记录所有的条数 private ArrayList<ArrayList<Integer>> listAll = new ArrayList<ArrayList<Integer>>(); // 记录满足条件的list,初始化为null public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) { if (root == null) return listAll; list.add(root.val); target -= root.val; if (target == 0 && root.left == null && root.right == null) { listAll.add(new ArrayList<Integer>(list)); } FindPath(root.left, target); // 只是执行,返回值并没有用,所以不接受返回结果,下同理 FindPath(root.right, target); list.remove(list.size() - 1); // 走到这里说明此时,target<0或者left&right都等于null,回溯 return listAll; } }
解法二:书上版本
import java.util.ArrayList; import java.util.Stack; class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } public class Solution { private ArrayList<ArrayList<Integer>> listAll = new ArrayList<ArrayList<Integer>>(); public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) { if (root == null) return listAll; Stack path = new Stack(); int currentSum = 0; return FindPath(root, target, path, currentSum); } private ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target, Stack path, int currentSum) { currentSum += root.val; path.push(root.val); Boolean isLeaf = root.left == null && root.right == null; if(currentSum == target && isLeaf) { listAll.add(new ArrayList<Integer>(path)); } if(root.left != null) { FindPath(root.left, target, path, currentSum); } if(root.right != null) { FindPath(root.right, target, path, currentSum); } path.pop(); return listAll; } }
相关文章推荐
- 剑指Offer——二叉树中和为某一值的路径
- 《剑指offer》二叉树中和为某一值的路径
- 剑指offer 二叉树中和为某一值的路径 java实现
- 剑指offer面试题之二叉树中和为某一值的所有路径
- 剑指offer(26):二叉树中和为某一值的路径
- 《剑指Offer》面试题25:二叉树中和为某一值的路径
- 【剑指offer系列】 二叉树中和为某一值的路径___25
- 剑指Offer系列---(27)二叉树中和为某一值的路径
- 剑指Offer:二叉树中和为某一值的路径
- 剑指offer --- 二叉树中和为某一数的路径
- 剑指offer:二叉树中和为某一值的路径
- 剑指offer:输出二叉树和为某一值的所有路径
- 《剑指offer》——二叉树中和为某一值的路径
- 剑指offer-25 二叉树中和为某一值的路径
- 剑指Offer系列-面试题25:二叉树中和为某一值的路径
- 《剑指offer》面试题25:二叉树中和为某一值的路径
- 剑指offer系列之二十三:二叉树中和为某一值得所有路径
- 《剑指offer》-二叉树中和为某一值的路径
- (剑指Offer)面试题25:二叉树中和为某一值的路径
- 剑指offer 面试题25—二叉树中和为某一值的路径