答案:
java
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<Integer> distanceK(TreeNode root, TreeNode target, int k) {
Map<Integer, int[]> map = new HashMap<>();
int[] link = {-1,-1,-1};
map.put(root.val,link);
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(queue.size()!=0){
TreeNode cur = queue.poll();
int[] link1 = new int[3];
int[]temp = map.get(cur.val);//cur包含父节点的link
link1[0] = temp[0];
link1[1] = -1;
link1[2] = -1;
int[] link2 = {cur.val,-1,-1};//记录left right的父节点
if(cur.left!=null){
TreeNode left = cur.left;
link1[1] = left.val;
map.put(left.val,link2);
queue.add(left);
}
if(cur.right!=null){
TreeNode right = cur.right;
link1[2] = right.val;
map.put(right.val,link2);
queue.add(right);
}
map.put(cur.val,link1);
}
map.forEach((key, value) -> System.out.println("Key = " + key + ", Value = " + value[0] +" "+ value[1]+" "+ value[2]));
List<Integer> res = new ArrayList<>();
Queue<Integer> queue2 = new LinkedList<>();
Set<Integer> set = new HashSet<>();
queue2.add(target.val);
set.add(target.val);
int step = 0;
while(queue2.size()!=0){
if(step==k){
while(queue2.size()!=0){
res.add(queue2.poll());
}
break;
}
int len = queue2.size();
for(int i=0;i<len;i++){
int node = queue2.poll();
int value[] = map.get(node);
if(value[0]!=-1&&!set.contains(value[0])){
queue2.add(value[0]);
set.add(value[0]);
}
if(value[1]!=-1&&!set.contains(value[1])){
queue2.add(value[1]);
set.add(value[1]);
}
if(value[2]!=-1&&!set.contains(value[2])){
queue2.add(value[2]);
set.add(value[2]);
}
}
step++;
}
return res;
}
}