该解法使用了前序递归遍历二叉数-中左右
1.确定递归函数的参数和返回值
参数:首先要传入TreeNode,其次要传入结果集用于保存结果,最后要传入pathList用于对每一个路径进行处理和保存
返回值: 因为把结果直接放在了resultList中,所以不需要任何返回值
2.确定递归终止条件
当node的左右结点都是null时就没有必要继续递归了
3.确定单层递归的逻辑
查看以下具体代码中的注释
public List<String> binaryTreePaths(TreeNode root) {
List<String> result = new ArrayList<>();
ArrayList<Integer> integers = new ArrayList<>();
getPaths(root, result, integers);
return result;
}
public void getPaths(TreeNode node, List<String> result, List<Integer> path) {
//需要把加入数据放在终止条件前面,不然叶子结点的值还没有被加入就先返回了
path.add(node.val);
//确定终止条件
if (node.left == null && node.right == null) {
// 输出
StringBuilder sb = new StringBuilder();// StringBuilder用来拼接字符串,速度更快,但是线程不安全
for (int i = 0; i < path.size() - 1; i++) {
sb.append(path.get(i)).append("->");
}
sb.append(path.get(path.size() - 1));
result.add(sb.toString());
return;
}
//按照前序递归进行遍历-中左右
if (node.left != null) {
getPaths(node.left, result, path);
//回溯时,移除path中的最后一个元素
path.remove(path.size() - 1);
}
if (node.right != null) {
getPaths(node.right, result, path);
//回溯时,移除path中的最后一个元素
path.remove(path.size() - 1);
}
}