DFS+回溯
class Solution {
LinkedList<Integer> path = new LinkedList<>();
List<String> list = new ArrayList<>();
public List<String> binaryTreePaths(TreeNode root) {
dfs(root);
return list;
}
public void dfs(TreeNode node) {
if (node == null) {
return;
}
path.add(node.val);
if (node.left == null && node.right == null) {
int size = path.size();
String res = "";
for (int i = 0; i < size; i++) {
if (i != size - 1) {
res = res + path.get(i) + "->";//Integer直接转成char了
} else {
res += path.get(i);
}
}
list.add(res);
}
dfs(node.left);//因为是void类型,node.left遇到null后return,继续执行下面的语句
// path.removeLast(); //不可撤销,下层null直接return,删掉的是当前节点
dfs(node.right);
path.removeLast();//当一个节点的左右节点均访问过才可以撤销
}
}
写法2
class Solution {
List<Integer> path = new ArrayList<>();
List<String> res = new ArrayList<>();
public List<String> binaryTreePaths(TreeNode root) {
dfs(root);
return res;
}
public void dfs(TreeNode node) {
path.add(node.val);
if (node.left == null && node.right == null) {
String str = "";
for (int i = 0; i < path.size(); i++) {
if (i != path.size() - 1) {
str += path.get(i) + "->";
} else {
str += path.get(i);
}
}
res.add(str);
return;
}
if (node.left != null) {
dfs(node.left);
path.remove(path.size() - 1);// 下层的null不会被添加访问
}
if (node.right != null) {
dfs(node.right);
path.remove(path.size() - 1);
}
}
}