Skip to content

Commit 4863f92

Browse files
Create TopViewOfBT.java
1 parent 76a6e75 commit 4863f92

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

Binary Tree/TopViewOfBT.java

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
import java.util.Scanner;
2+
import java.util.LinkedList;
3+
import java.util.Queue;
4+
import java.util.Stack;
5+
import java.util.ArrayList;
6+
import java.util.TreeMap;
7+
8+
class Node{
9+
int val;
10+
Node left;
11+
Node right;
12+
Node(int val){
13+
this.val = val;
14+
this.left = this.right = null;
15+
}
16+
}
17+
18+
class TopViewOfBT{
19+
static Node root;
20+
static Queue<Node> queue = new LinkedList<>(); //queue is only responsible for tracking nodes whose children need processing.
21+
22+
static void insert(int[] nodes){
23+
24+
root = new Node(nodes[0]);
25+
queue.add(root);
26+
int i = 1;
27+
28+
while(!queue.isEmpty()){
29+
Node currentNode = queue.poll();
30+
if(i<nodes.length){
31+
currentNode.left = new Node(nodes[i++]);
32+
queue.add(currentNode.left);
33+
}
34+
if(i<nodes.length){
35+
currentNode.right = new Node(nodes[i++]);
36+
queue.add(currentNode.right);
37+
}
38+
}
39+
}
40+
41+
static ArrayList<Integer> topView(Node root){ //needa incorporate depth tracking to ensure that shallower nodes are processed porperly and not overshadowed.
42+
int hd = 0;
43+
TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>(); //TreeMap over HashMap at it sorts the hd
44+
dfs(root, hd, map);
45+
ArrayList<Integer> list = new ArrayList<>();
46+
for(int ele : map.keySet()){
47+
System.out.println(map.get(ele));
48+
list.add(map.get(ele));
49+
}
50+
return list;
51+
}
52+
53+
static void dfs(Node root, int hd, TreeMap<Integer, Integer> map){
54+
if(root == null){
55+
return;
56+
}
57+
if(!map.containsKey(hd)){
58+
map.put(hd, root.val);
59+
}
60+
dfs(root.left, hd-1, map);
61+
//System.out.print(" " + root.val);
62+
dfs(root.right, hd+1, map);
63+
}
64+
65+
static void preorder(Node root){ // Root -> Left -> Right
66+
if(root == null){
67+
return;
68+
}
69+
70+
System.out.print(" " + root.val);
71+
preorder(root.left);
72+
preorder(root.right);
73+
}
74+
75+
public static void main(String[] args){
76+
Scanner input = new Scanner(System.in);
77+
System.out.println("Enter the number of nodes: ");
78+
int numOfNodes = input.nextInt();
79+
System.out.println("Enter the nodes: ");
80+
int[] nodes = new int[numOfNodes];
81+
for(int i = 0; i<numOfNodes; i++){
82+
nodes[i] = input.nextInt(); //10 5 null 3 7 13 20
83+
}
84+
85+
insert(nodes);
86+
System.out.println("Pre-order:");
87+
preorder(root);
88+
System.out.println();
89+
//System.out.println("DFS:");
90+
//dfs(root);
91+
System.out.println("Top view of a BT: ");
92+
topView(root);
93+
94+
input.close();
95+
}
96+
}

0 commit comments

Comments
 (0)