深度优先搜索
1、加入—> (改了一下回溯)
class Solution {
List<String>paths=new ArrayList<>();
public List<String> binaryTreePaths(TreeNode root) {
dfs(root,"");
return paths;
}
void dfs(TreeNode root,String subpath){
if(root!=null){
StringBuilder builder=new StringBuilder(subpath);
builder.append(Integer.toString(root.val));
if(root.left==null&&root.right==null){
paths.add(builder.toString());
}
else{
builder.append("->");
dfs(root.left,builder.toString());
dfs(root.right,builder.toString());
}
}
}
}
2、只返回序列 没有—>,回溯
class Solution {
List<String>paths=new ArrayList<>();
StringBuilder builder=new StringBuilder();
public List<String> binaryTreePaths(TreeNode root) {
dfs(root);
return paths;
}
void dfs(TreeNode root){
if(root!=null){
builder.append(Integer.toString(root.val));
if(root.left==null&&root.right==null){
paths.add(builder.toString());
}
else{
dfs(root.left);
dfs(root.right);
}
builder.deleteCharAt(builder.length()-1);
}
}
}
广度优先搜索
class Solution {
public List<String> binaryTreePaths(TreeNode root) {
List<String> paths = new ArrayList<String>();
if (root == null) {
return paths;
}
Queue<TreeNode> nodeQueue = new LinkedList<TreeNode>();
Queue<String> pathQueue = new LinkedList<String>();
nodeQueue.offer(root);
pathQueue.offer(Integer.toString(root.val));
while (!nodeQueue.isEmpty()) {
TreeNode node = nodeQueue.poll();
String path = pathQueue.poll();
if (node.left == null && node.right == null) {
paths.add(path);
} else {
if (node.left != null) {
nodeQueue.offer(node.left);
pathQueue.offer(new StringBuffer(path).append("->").append(node.left.val).toString());
}
if (node.right != null) {
nodeQueue.offer(node.right);
pathQueue.offer(new StringBuffer(path).append("->").append(node.right.val).toString());
}
}
}
return paths;
}
}