Skip to content

Commit 6187d70

Browse files
implement bfs
1 parent 4863f92 commit 6187d70

File tree

1 file changed

+49
-10
lines changed

1 file changed

+49
-10
lines changed

Binary Tree/TopViewOfBT.java

Lines changed: 49 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,15 @@ class Node{
1515
}
1616
}
1717

18+
class Pair{
19+
Node node;
20+
int hd;
21+
Pair(Node node, int hd){
22+
this.node = node;
23+
this.hd = hd;
24+
}
25+
}
26+
1827
class TopViewOfBT{
1928
static Node root;
2029
static Queue<Node> queue = new LinkedList<>(); //queue is only responsible for tracking nodes whose children need processing.
@@ -38,7 +47,9 @@ static void insert(int[] nodes){
3847
}
3948
}
4049

41-
static ArrayList<Integer> topView(Node root){ //needa incorporate depth tracking to ensure that shallower nodes are processed porperly and not overshadowed.
50+
/*
51+
DFS Approach, needa incorporate depth tracking
52+
static ArrayList<Integer> topViewOfBT(Node root){
4253
int hd = 0;
4354
TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>(); //TreeMap over HashMap at it sorts the hd
4455
dfs(root, hd, map);
@@ -58,18 +69,48 @@ static void dfs(Node root, int hd, TreeMap<Integer, Integer> map){
5869
map.put(hd, root.val);
5970
}
6071
dfs(root.left, hd-1, map);
61-
//System.out.print(" " + root.val);
72+
// System.out.print(" " + root.val);
6273
dfs(root.right, hd+1, map);
6374
}
75+
*/
76+
77+
static ArrayList<Integer> topViewOfBT(Node root){
78+
79+
int hd = 0; //Horizontal distance
80+
Queue<Pair> q = new LinkedList<>();
81+
TreeMap<Integer, Integer> map = new TreeMap<>();
82+
bfs(root, q, hd, map);
83+
ArrayList<Integer> list = new ArrayList<>();
84+
for(int ele : map.keySet()){
85+
System.out.println(map.get(ele));
86+
list.add(map.get(ele));
87+
}
88+
return list;
89+
}
90+
91+
static void bfs(Node root, Queue<Pair> q, int hd, TreeMap<Integer, Integer> map){
6492

65-
static void preorder(Node root){ // Root -> Left -> Right
6693
if(root == null){
6794
return;
6895
}
96+
97+
q.add(new Pair(root, 0));
98+
99+
while(!q.isEmpty()){
100+
Pair ele = q.poll();
101+
102+
if(!map.containsKey(hd)){
103+
map.put(ele.hd, ele.node.val);
104+
}
69105

70-
System.out.print(" " + root.val);
71-
preorder(root.left);
72-
preorder(root.right);
106+
if(ele.node.right != null){
107+
q.add(new Pair(ele.node.right, ele.hd+1));
108+
}
109+
if(ele.node.left != null){
110+
q.add(new Pair(ele.node.left, ele.hd-1));
111+
hd -= 1;
112+
}
113+
}
73114
}
74115

75116
public static void main(String[] args){
@@ -83,13 +124,11 @@ public static void main(String[] args){
83124
}
84125

85126
insert(nodes);
86-
System.out.println("Pre-order:");
87-
preorder(root);
88-
System.out.println();
127+
89128
//System.out.println("DFS:");
90129
//dfs(root);
91130
System.out.println("Top view of a BT: ");
92-
topView(root);
131+
topViewOfBT(root);
93132

94133
input.close();
95134
}

0 commit comments

Comments
 (0)