Skip to content

Commit 410827f

Browse files
committed
getting the parents map and doing BFS to get all nodes distance K
1 parent 13d4839 commit 410827f

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

BFS/distanceK.java

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* public class TreeNode {
4+
* int val;
5+
* TreeNode left;
6+
* TreeNode right;
7+
* TreeNode(int x) { val = x; }
8+
* }
9+
*/
10+
// T.C - O(M+N) = O(N), N = no of nodes in BT, S.C = O(N)
11+
class Solution {
12+
public List<Integer> distanceK(TreeNode root, TreeNode target, int K) {
13+
HashMap<TreeNode, TreeNode> hm = new HashMap<>();
14+
nodeParentMap(root, hm, null);// since root has no parent
15+
HashSet<TreeNode> seen = new HashSet<>();
16+
Queue<TreeNode> q = new LinkedList<>();
17+
q.add(target);
18+
seen.add(target);
19+
int currentLayer = 0;
20+
while(!q.isEmpty()) {
21+
if (currentLayer == K) {
22+
return getLayerFromQueue(q);
23+
}
24+
// processing all nodes in the layer
25+
int layerSize = q.size();
26+
for(int i=0; i<layerSize; i++) {
27+
TreeNode curNode = q.poll();
28+
if (curNode.left != null && !seen.contains(curNode.left)) {
29+
seen.add(curNode.left);
30+
q.add(curNode.left);
31+
}
32+
if (curNode.right != null && !seen.contains(curNode.right)) {
33+
seen.add(curNode.right);
34+
q.add(curNode.right);
35+
}
36+
TreeNode parent = hm.get(curNode);
37+
if (parent != null && !seen.contains(parent)) {
38+
seen.add(parent);
39+
q.add(parent);
40+
}
41+
}
42+
currentLayer++;
43+
44+
}
45+
return new ArrayList<>();
46+
}
47+
48+
public void nodeParentMap(TreeNode root, HashMap<TreeNode, TreeNode> hm, TreeNode parent) {
49+
if (root == null) return;
50+
hm.put(root, parent);
51+
nodeParentMap(root.left, hm, root);
52+
nodeParentMap(root.right, hm, root);
53+
}
54+
55+
public List<Integer> getLayerFromQueue(Queue<TreeNode> q) {
56+
List<Integer> extractedLayer = new ArrayList<>();
57+
for(TreeNode n: q) {
58+
extractedLayer.add(n.val);
59+
}
60+
return extractedLayer;
61+
}
62+
}

0 commit comments

Comments
 (0)