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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
class Solution { //使用递归调用实现 //参数分别为传入的结点,本次的单条路径,所有路径结果数组 public void travelTreeAllPath(TreeNode root, List<Integer> path, List<String> result){ //将中结点加入到path中,这样才算遍历到了叶子结点 path.add(root.val); //递归条件,到叶子节点结束递归 if(root.left == null && root.right == null){ //结束递归的时候将path中对应的结果添加到result list中 String path_str = ""; for(int i = 0;i < path.size() - 1;i++){ path_str += String.valueOf(path.get(i)); path_str += "->"; } path_str += path.get(path.size() - 1); //将当前结果加入到result list中 result.add(path_str); return; }
//每次递归需要执行的代码 //不是空结点才进行递归 if(root.left != null){ travelTreeAllPath(root.left, path, result); path.remove(path.size() - 1);//回溯 }
if(root.right != null){ travelTreeAllPath(root.right, path, result); path.remove(path.size() - 1);//回溯 } } public List<String> binaryTreePaths(TreeNode root) { List<String> result = new ArrayList<>(); List<Integer> path = new ArrayList<>(); travelTreeAllPath(root, path, result); return result; } }
//使用StringBuilder进行字符串的构造,效率提升很大
class Solution { //使用递归调用实现 //参数分别为传入的结点,本次的单条路径,所有路径结果数组 public void travelTreeAllPath(TreeNode root, List<Integer> path, List<String> result){ //将中结点加入到path中,这样才算遍历到了叶子结点 path.add(root.val); //递归条件,到叶子节点结束递归 if(root.left == null && root.right == null){ //结束递归的时候将path中对应的结果添加到result list中 StringBuilder sb = new StringBuilder(); for(int i = 0;i < path.size() - 1;i++){ sb.append(String.valueOf(path.get(i))); sb.append("->"); } sb.append(path.get(path.size() - 1)); //将当前结果加入到result list中 result.add(sb.toString()); return; }
//每次递归需要执行的代码 //不是空结点才进行递归 if(root.left != null){ travelTreeAllPath(root.left, path, result); path.remove(path.size() - 1);//回溯 }
if(root.right != null){ travelTreeAllPath(root.right, path, result); path.remove(path.size() - 1);//回溯 } } public List<String> binaryTreePaths(TreeNode root) { List<String> result = new ArrayList<>(); List<Integer> path = new ArrayList<>(); travelTreeAllPath(root, path, result); return result; } }
|