题目描述
题解
用map记录每个结点的父结点,然后让dfs从target结点开始(假设target就是根结点),然后递归时纪录深度,只要深度等于k,就是和target的距离等于k,就可以存入list。
执行用时:14 ms, 在所有 Java 提交中击败了74.54%的用户
内存消耗:38.1 MB, 在所有 Java 提交中击败了98.78%的用户
class Solution{
List<Integer> res = new ArrayList<>();
Map<TreeNode, TreeNode> map = new HashMap<>(); // <root, parent>
Set<TreeNode> set = new HashSet<>();
int k;
public List<Integer> distanceK (TreeNode root, TreeNode target, int k){
this.k = k;
findParent(root, null);
dfs(target, target, 0);
return res;
}
public void findParent(TreeNode root, TreeNode parent) {
if (root == null)
return;
map.put(root, parent);
findParent(root.left, root);
findParent(root.right, root);
}
public void dfs(TreeNode root, TreeNode target, int depth) {
if (root == null || set.contains(root)) {
return;
}
set.add(root);
if (depth == k) {
res.add(root.val);
return;
}
// System.out.println(root.val + " " + depth);
dfs(root.left, target, depth + 1);
dfs(root.right, target, depth + 1);
dfs(map.get(root), target, depth + 1);
}
}