Advertisement
Guest User

Grokking 205

a guest
Jan 12th, 2022
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.57 KB | None | 0 0
  1. class Solution {
  2.  
  3. public class TreeNode {
  4. int val;
  5. TreeNode left;
  6. TreeNode right;
  7. TreeNode(int x) { val = x; }
  8. }
  9.  
  10. Map<Integer, List<Integer>> graph;
  11.  
  12. public List<Integer> distanceK(TreeNode root, TreeNode target, int k) {
  13. // setup
  14. this.graph = new HashMap<>();
  15.  
  16. // do dfs to build graph
  17. dfs(root, null);
  18.  
  19. // do bfs to find distance k node
  20. Set<Integer> visited = new HashSet<>();
  21.  
  22. Queue<Integer> queue = new LinkedList<>();
  23. queue.offer(target.val);
  24. visited.add(target.val);
  25.  
  26. List<Integer> ans = new LinkedList<>();
  27.  
  28. int dist = 0;
  29. while (!queue.isEmpty()) {
  30. int qSize = queue.size();
  31.  
  32. // dist == k, build answer
  33. if (dist == k) {
  34. while (!queue.isEmpty()) {
  35. ans.add(queue.poll());
  36. }
  37.  
  38. break;
  39. }
  40.  
  41. for (int i = 0; i < qSize; i++) {
  42. int at = queue.poll();
  43.  
  44. for (Integer to : graph.get(at)) {
  45. if (!visited.contains(to)) {
  46. queue.offer(to);
  47. visited.add(to);
  48. }
  49. }
  50. }
  51.  
  52. dist++;
  53. }
  54.  
  55. return ans;
  56. }
  57.  
  58. void dfs(TreeNode root, TreeNode parent) {
  59.  
  60. if (root == null) {
  61. return;
  62. }
  63.  
  64. graph.putIfAbsent(root.val, new LinkedList<Integer>());
  65.  
  66. if (parent != null) {
  67. graph.putIfAbsent(parent.val, new LinkedList<Integer>());
  68.  
  69. graph.get(root.val).add(parent.val);
  70. graph.get(parent.val).add(root.val);
  71. }
  72.  
  73. dfs(root.left, root);
  74. dfs(root.right, root);
  75. }
  76.  
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement