java
复制代码
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);
}