算法准备-4.11
1.二叉树中和为某一值的路径
-
思路:首先对二叉树进行先序遍历,若当前节点为null,则直接返回,若为叶节点且路径和为sum,则把当前路径添加到结果中,再递归其左右子节点
-
描述:输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
-
解法:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { LinkedList<List<Integer>> res=new LinkedList<>(); LinkedList<Integer> path=new LinkedList<>(); public List<List<Integer>> pathSum(TreeNode root, int sum) { recur(root,sum); return res; } void recur(TreeNode root,int tar){ if(root==null) return; path.add(root.val); tar=tar-root.val; if(tar==0&&root.left==null&&root.right==null) { res.add(new LinkedList(path)); } recur(root.left,tar); recur(root.right,tar); path.removeLst(); } }
这题是我第一次接触回溯法,所以看的是题目讨论区大佬的解法,侵删。
注:牛客网有一题类似,只是需要将结果按照数组长度排个序