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());
	    }
}