Skip to content

Commit 3d0f771

Browse files
Merge pull request #484 from ankank30/master
Tree views and Diagonal traversal
2 parents a5e88ff + 8ba2e6a commit 3d0f771

File tree

4 files changed

+314
-0
lines changed

4 files changed

+314
-0
lines changed
+77
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#include <iostream>
2+
#include <vector>
3+
4+
using namespace std;
5+
6+
class Node {
7+
8+
public:
9+
int value;
10+
Node* left;
11+
Node* right;
12+
13+
Node (int val) {
14+
this->value = val;
15+
this->left = NULL;
16+
this->right = NULL;
17+
}
18+
};
19+
20+
vector< vector< int > > diaTree;
21+
22+
void diagonalTraversalUtil (Node* root, int index) {
23+
if (root == NULL) {
24+
return;
25+
}
26+
27+
if (index < diaTree.size()) {
28+
diaTree[index].push_back(root->value);
29+
} else {
30+
vector<int> temp = {root->value};
31+
32+
diaTree.push_back(temp);
33+
}
34+
diagonalTraversalUtil (root->left, index+1);
35+
diagonalTraversalUtil (root->right, index);
36+
}
37+
38+
void diagonalTraversal (Node* root) {
39+
40+
diagonalTraversalUtil (root, 0);
41+
42+
for (int i = 0; i < diaTree.size(); i++) {
43+
cout << "Diagonal " << i+1 << ": ";
44+
for (int j = 0; j < diaTree[i].size(); j++) {
45+
cout << diaTree[i][j] << " ";
46+
}
47+
cout << endl;
48+
}
49+
}
50+
51+
int main () {
52+
Node* root = new Node(1);
53+
root->left = new Node(2);
54+
root->right = new Node(3);
55+
root->left->left = new Node(4);
56+
root->left->right = new Node(5);
57+
root->right->left = new Node(6);
58+
root->right->left->left = new Node(7);
59+
60+
61+
/*
62+
1
63+
/ \
64+
/ \
65+
2 3
66+
/ \ |
67+
/ \ |
68+
4 5 /
69+
6
70+
/
71+
7
72+
*/
73+
74+
diagonalTraversal(root);
75+
76+
return 0;
77+
}

Tree/Tree View/BottomView.cpp

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
#include <iostream>
2+
#include <deque>
3+
4+
using namespace std;
5+
6+
class Node {
7+
8+
public:
9+
int value;
10+
Node* left;
11+
Node* right;
12+
13+
Node (int val) {
14+
this->value = val;
15+
this->left = NULL;
16+
this->right = NULL;
17+
}
18+
};
19+
20+
deque <int> dq;
21+
int low, high;
22+
23+
void bottomViewUtil (Node* root, int horDist) {
24+
if (root == NULL) {
25+
return;
26+
}
27+
28+
if (!dq.empty() && horDist > high) {
29+
dq.push_back(root->value);
30+
high++;
31+
} else if (horDist < low) {
32+
dq.push_front(root->value);
33+
low--;
34+
} else {
35+
dq[horDist-low] = root->value;
36+
}
37+
bottomViewUtil (root->left, horDist-1);
38+
bottomViewUtil (root->right, horDist+1);
39+
}
40+
41+
void bottomView (Node* root) {
42+
low = 0;
43+
high = -1;
44+
45+
bottomViewUtil (root, 0);
46+
47+
deque <int> :: iterator i;
48+
49+
cout << "Bottom View: ";
50+
for (i = dq.begin(); i != dq.end(); i++) {
51+
cout << *i << " ";
52+
}
53+
cout << endl;
54+
}
55+
56+
int main () {
57+
Node* root = new Node(1);
58+
root->left = new Node(2);
59+
root->right = new Node(3);
60+
root->left->left = new Node(4);
61+
root->left->right = new Node(5);
62+
root->right->left = new Node(6);
63+
root->right->left->left = new Node(7);
64+
65+
66+
/*
67+
1
68+
/.\
69+
2 . 3
70+
/.\. |
71+
4 . 5 |
72+
. ./
73+
. 6
74+
./
75+
7
76+
*/
77+
78+
bottomView(root);
79+
80+
return 0;
81+
}

Tree/Tree View/LeftView.cpp

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
#include <iostream>
2+
3+
using namespace std;
4+
5+
class Node {
6+
7+
public:
8+
int value;
9+
Node* left;
10+
Node* right;
11+
12+
Node (int val) {
13+
this->value = val;
14+
this->left = NULL;
15+
this->right = NULL;
16+
}
17+
};
18+
19+
int maxLevel;
20+
21+
void leftViewUtil(Node* root, int level) {
22+
// Check if new level reached is the highest
23+
if (maxLevel < level) {
24+
cout << root -> value << endl;
25+
maxLevel = level;
26+
}
27+
28+
// Left side of the tree is traversed first so that
29+
// left nodes are checked first for the condition that
30+
// whether they have reached new max level or not.
31+
if (root -> left != NULL) {
32+
leftViewUtil(root -> left, level+1);
33+
}
34+
35+
if (root -> right != NULL) {
36+
leftViewUtil(root -> right, level+1);
37+
}
38+
}
39+
40+
void leftView(Node *root) {
41+
maxLevel = -1;
42+
43+
leftViewUtil(root, 0);
44+
}
45+
46+
int main () {
47+
Node* root = new Node(1);
48+
root->left = new Node(2);
49+
root->right = new Node(3);
50+
root->left->left = new Node(4);
51+
root->left->right = new Node(5);
52+
root->right->left = new Node(6);
53+
root->right->left->left = new Node(7);
54+
55+
56+
/*
57+
-> 1
58+
/ \
59+
/ \
60+
/ \
61+
-> 2 3
62+
/ \ /
63+
-> 4 5 6
64+
/
65+
-> 7
66+
*/
67+
68+
cout << "Left view of the tree: \n";
69+
leftView(root);
70+
71+
return 0;
72+
}

Tree/Tree View/TopView.cpp

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
#include <iostream>
2+
#include <deque>
3+
4+
using namespace std;
5+
6+
class Node {
7+
8+
public:
9+
int value;
10+
Node* left;
11+
Node* right;
12+
13+
Node (int val) {
14+
this->value = val;
15+
this->left = NULL;
16+
this->right = NULL;
17+
}
18+
};
19+
20+
deque <int> dq;
21+
int low, high;
22+
23+
void topViewUtil (Node* root, int horDist) {
24+
if (root == NULL) {
25+
return;
26+
}
27+
28+
if (!dq.empty() && horDist > high) {
29+
dq.push_back(root->value);
30+
high++;
31+
} else if (horDist < low) {
32+
dq.push_front(root->value);
33+
low--;
34+
}
35+
topViewUtil (root->left, horDist-1);
36+
topViewUtil (root->right, horDist+1);
37+
}
38+
39+
void topView (Node* root) {
40+
low = 0;
41+
high = 0;
42+
43+
dq.push_back(root->value);
44+
topViewUtil (root, 0);
45+
46+
deque <int> :: iterator i;
47+
48+
cout << "Bottom View: ";
49+
for (i = dq.begin(); i != dq.end(); i++) {
50+
cout << *i << " ";
51+
}
52+
cout << endl;
53+
}
54+
55+
int main () {
56+
Node* root = new Node(1);
57+
root->left = new Node(2);
58+
root->right = new Node(3);
59+
root->left->left = new Node(4);
60+
root->left->right = new Node(5);
61+
root->right->left = new Node(6);
62+
root->right->left->left = new Node(7);
63+
64+
65+
/*
66+
1
67+
/.\
68+
/ . \
69+
2 . 3
70+
/.\ . |
71+
/ . \. |
72+
4 . 5 |
73+
. . /
74+
. ./
75+
. 6
76+
. /
77+
./
78+
7
79+
*/
80+
81+
topView(root);
82+
83+
return 0;
84+
}

0 commit comments

Comments
 (0)