Skip to content

Commit 2e63d9c

Browse files
authored
Create TopView_of_tree.cpp
1 parent 0349792 commit 2e63d9c

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

Trees/TopView_of_tree.cpp

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
// C++ program to print top
2+
// view of binary tree
3+
4+
#include <bits/stdc++.h>
5+
using namespace std;
6+
7+
// Structure of binary tree
8+
struct Node
9+
{
10+
Node *left;
11+
Node *right;
12+
int hd;
13+
int data;
14+
};
15+
16+
// function to create a new node
17+
Node *newNode(int key)
18+
{
19+
Node *node = new Node();
20+
node->left = node->right = NULL;
21+
node->data = key;
22+
return node;
23+
}
24+
25+
// function should print the topView of
26+
// the binary tree
27+
void topview(Node *root)
28+
{
29+
if (root == NULL)
30+
return;
31+
queue<Node *> q;
32+
map<int, int> m;
33+
int hd = 0;
34+
root->hd = hd;
35+
36+
// push node and horizontal distance to queue
37+
q.push(root);
38+
39+
cout << "The top view of the tree is : \n";
40+
41+
while (q.size())
42+
{
43+
hd = root->hd;
44+
45+
// count function returns 1 if the container
46+
// contains an element whose key is equivalent
47+
// to hd, or returns zero otherwise.
48+
if (m.count(hd) == 0)
49+
m[hd] = root->data;
50+
if (root->left)
51+
{
52+
root->left->hd = hd - 1;
53+
q.push(root->left);
54+
}
55+
if (root->right)
56+
{
57+
root->right->hd = hd + 1;
58+
q.push(root->right);
59+
}
60+
q.pop();
61+
root = q.front();
62+
}
63+
64+
for (auto i = m.begin(); i != m.end(); i++)
65+
{
66+
cout << i->second << " ";
67+
}
68+
}
69+
70+
71+
int main()
72+
{
73+
74+
Node *root = newNode(1);
75+
root->left = newNode(2);
76+
root->right = newNode(3);
77+
root->left->right = newNode(4);
78+
root->left->right->right = newNode(5);
79+
root->left->right->right->right = newNode(6);
80+
cout << "Following are nodes in top view of Binary "
81+
"Tree\n";
82+
topview(root);
83+
return 0;
84+
}

0 commit comments

Comments
 (0)