863 二叉树中所有距离为 K 的结点
思路:
1.先dfs記錄parent,
2.然後bfs找到第k層,其中要注意,已經便利過的不能重複變臉,所以要一個seen的集合來保存已經便利過的。
3.注意java stream的用法。
https://www.runoob.com/java/java8-streams.html
queue.stream().map(n -> n.val).collect(Collectors.toList());
class Solution {
private Mapparents = new HashMap<>();
Queuequeue = new LinkedList<>();
public List distanceK(TreeNode root, TreeNode target, int k) {
dfs(root);
queue.offer(target);
return bfs(target, k);
}
private void dfs(TreeNode node){
if(node.left != null){
parents.put(node.left,node);
dfs(node.left);
}
if(node.right != null){
parents.put(node.right,node);
dfs(node.right);
}
}
private List bfs(TreeNode target, int k){
int depth=0;
Setseen = new HashSet<>();
seen.add(target);
while(!queue.isEmpty()&&depthnode.val).collect(Collectors.toList());
}
}