二叉树中的所有路径
问题陈述
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
1 2 3 4 5 6 7 8 9 10 11 12 13
| 输入:
1 / \ 2 3 \ 5
输出: ["1->2->5", "1->3"]
解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
|
思路分析
典型的回溯
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| public class Solution{ public List<String> allPaths(TreeNode root){ List<String> paths=new ArrayList<>(); if(root==null){ return paths; } List<Integer> values=new ArrayList<>(); backTrack(root,paths,values); return paths; } private void backTrack(TreeNode node,List<Integer> paths,List<Integer> values){ if(node==null){ return; } values.add(node.val); if(isLeaf(node)){ paths.add(buildPath(values)); }else{ backTrack(node.left,paths,values); backTrack(node.right,paths,values); } values.remove(values.size()-1); } private boolean isLeaf(TreeNode node){ if(node.left==null&&node.right==null){ return true; } return false; } private String buildPath(List<Integer> values){ StringBuilder res=new StringBuilder(); for(int i=0;i<values.size();i++){ res.append(values.get(i)); if(i!=values.size()-1){ res.append("->"); } } return res.toString(); } }
|