算法 【回溯】二叉树的所有路径 求解代码 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 public List<String> binaryTreePaths(TreeNode root) { List<String> ans = new ArrayList<>(); if (root == null) { return ans; } StringBuilder sb = new StringBuilder(); backtrack(root, sb, ans); return ans; } private void backtrack(TreeNode root, StringBuilder sb, List<String> ans) { if (root == null) { return; } // 记录当前拼接前的长度,用于回溯撤销 int len = sb.length(); sb.append(root.val); // 到达叶子节点,添加完整路径 if (root.left == null && root.right == null) { ans.add(sb.toString()); } else { sb.append("->"); backtrack(root.left, sb, ans); backtrack(root.right, sb, ans); } // 回溯撤销,恢复StringBuilder到拼接前的状态 sb.setLength(len); }