Skip to content

Commit 8f33a59

Browse files
committed
Added solutions for:
102. Binary Tree Level Order Traversal: https://leetcode.com/problems/binary-tree-level-order-traversal 48. Rotate Image: https://leetcode.com/problems/rotate-image
1 parent 786ed9f commit 8f33a59

File tree

7 files changed

+137
-21
lines changed

7 files changed

+137
-21
lines changed

algorithm.xcodeproj/xcuserdata/aseshshrestha.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
filePath = "algorithm/main.cpp"
1515
startingColumnNumber = "9223372036854775807"
1616
endingColumnNumber = "9223372036854775807"
17-
startingLineNumber = "429"
18-
endingLineNumber = "429"
17+
startingLineNumber = "433"
18+
endingLineNumber = "433"
1919
landmarkName = "main(argc, argv)"
2020
landmarkType = "9">
2121
</BreakpointContent>
@@ -30,8 +30,8 @@
3030
filePath = "algorithm/main.cpp"
3131
startingColumnNumber = "9223372036854775807"
3232
endingColumnNumber = "9223372036854775807"
33-
startingLineNumber = "395"
34-
endingLineNumber = "395"
33+
startingLineNumber = "399"
34+
endingLineNumber = "399"
3535
landmarkName = "main(argc, argv)"
3636
landmarkType = "9">
3737
</BreakpointContent>
@@ -46,8 +46,8 @@
4646
filePath = "algorithm/main.cpp"
4747
startingColumnNumber = "9223372036854775807"
4848
endingColumnNumber = "9223372036854775807"
49-
startingLineNumber = "320"
50-
endingLineNumber = "320"
49+
startingLineNumber = "324"
50+
endingLineNumber = "324"
5151
landmarkName = "main(argc, argv)"
5252
landmarkType = "9">
5353
</BreakpointContent>
@@ -62,8 +62,8 @@
6262
filePath = "algorithm/main.cpp"
6363
startingColumnNumber = "9223372036854775807"
6464
endingColumnNumber = "9223372036854775807"
65-
startingLineNumber = "288"
66-
endingLineNumber = "288"
65+
startingLineNumber = "292"
66+
endingLineNumber = "292"
6767
landmarkName = "main(argc, argv)"
6868
landmarkType = "9">
6969
</BreakpointContent>
@@ -110,8 +110,8 @@
110110
filePath = "algorithm/main.cpp"
111111
startingColumnNumber = "9223372036854775807"
112112
endingColumnNumber = "9223372036854775807"
113-
startingLineNumber = "250"
114-
endingLineNumber = "250"
113+
startingLineNumber = "254"
114+
endingLineNumber = "254"
115115
landmarkName = "main(argc, argv)"
116116
landmarkType = "9">
117117
</BreakpointContent>
@@ -126,8 +126,8 @@
126126
filePath = "algorithm/main.cpp"
127127
startingColumnNumber = "9223372036854775807"
128128
endingColumnNumber = "9223372036854775807"
129-
startingLineNumber = "213"
130-
endingLineNumber = "213"
129+
startingLineNumber = "217"
130+
endingLineNumber = "217"
131131
landmarkName = "main(argc, argv)"
132132
landmarkType = "9">
133133
</BreakpointContent>
@@ -142,8 +142,8 @@
142142
filePath = "algorithm/main.cpp"
143143
startingColumnNumber = "9223372036854775807"
144144
endingColumnNumber = "9223372036854775807"
145-
startingLineNumber = "172"
146-
endingLineNumber = "172"
145+
startingLineNumber = "176"
146+
endingLineNumber = "176"
147147
landmarkName = "main(argc, argv)"
148148
landmarkType = "9">
149149
</BreakpointContent>
@@ -174,8 +174,8 @@
174174
filePath = "algorithm/main.cpp"
175175
startingColumnNumber = "9223372036854775807"
176176
endingColumnNumber = "9223372036854775807"
177-
startingLineNumber = "161"
178-
endingLineNumber = "161"
177+
startingLineNumber = "165"
178+
endingLineNumber = "165"
179179
landmarkName = "main(argc, argv)"
180180
landmarkType = "9">
181181
</BreakpointContent>
@@ -190,8 +190,8 @@
190190
filePath = "algorithm/main.cpp"
191191
startingColumnNumber = "9223372036854775807"
192192
endingColumnNumber = "9223372036854775807"
193-
startingLineNumber = "147"
194-
endingLineNumber = "147"
193+
startingLineNumber = "151"
194+
endingLineNumber = "151"
195195
landmarkName = "main(argc, argv)"
196196
landmarkType = "9">
197197
</BreakpointContent>
@@ -254,8 +254,8 @@
254254
filePath = "algorithm/number.cpp"
255255
startingColumnNumber = "9223372036854775807"
256256
endingColumnNumber = "9223372036854775807"
257-
startingLineNumber = "1195"
258-
endingLineNumber = "1195"
257+
startingLineNumber = "1200"
258+
endingLineNumber = "1200"
259259
landmarkName = "invoke_product_of_array_except_itself()"
260260
landmarkType = "9">
261261
</BreakpointContent>

algorithm/binary_tree.cpp

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,17 @@ void invoke_binary_tree() {
6767
std::cout<<std::endl;
6868
}
6969

70+
template<typename T>
71+
int get_binary_tree_height(CBinaryTree<T>* node) {
72+
if(!node) {
73+
return 0;
74+
}
75+
76+
int left_height = get_binary_tree_height(node->m_left_node) + 1;
77+
int right_height = get_binary_tree_height(node->m_right_node) + 1;
78+
return std::max(left_height, right_height);
79+
}
80+
7081
template<typename T>
7182
void right_side_view(CBinaryTree<T>* node, int level, std::vector<int>& output) {
7283
if(!node) {
@@ -92,3 +103,51 @@ void invoke_right_side_view() {
92103
std::cout<<node_value<<"->";
93104
});
94105
}
106+
107+
/*
108+
3
109+
/ \
110+
9 20
111+
/ \
112+
15 7
113+
114+
RC: O(nh), SC: O(n+h)
115+
*/
116+
void level_order_traversal(CBinaryTree<int32_t>* node, int level, int actual_level, std::unordered_map<int, std::vector<int>>& value_map) {
117+
if(!node) {
118+
return;
119+
}
120+
121+
if(level == 1) {
122+
value_map[actual_level].push_back(node->m_data);
123+
} else if(level > 1) {
124+
level_order_traversal(node->m_left_node, level - 1, actual_level, value_map);
125+
level_order_traversal(node->m_right_node, level - 1, actual_level, value_map);
126+
}
127+
}
128+
void invoke_level_order_traversal() {
129+
std::vector<std::vector<int>> output;
130+
std::unordered_map<int, std::vector<int>> value_map;
131+
CBinaryTree<int32_t> binary_tree(3);
132+
binary_tree.m_left_node = new CBinaryTree<int32_t>(9);
133+
binary_tree.m_right_node = new CBinaryTree<int32_t>(20);
134+
binary_tree.m_right_node->m_left_node = new CBinaryTree<int32_t>(15);
135+
binary_tree.m_right_node->m_right_node = new CBinaryTree<int32_t>(7);
136+
137+
int tree_height = get_binary_tree_height(&binary_tree);
138+
for(int level = 1; level <= tree_height; ++level) {
139+
level_order_traversal(&binary_tree, level, level, value_map);
140+
}
141+
142+
for(int level = 1; level <= tree_height; ++level) {
143+
output.push_back(value_map[level]);
144+
}
145+
146+
std::cout<<"The level-order traversal: ";
147+
std::for_each(output.begin(), output.end(), [&](std::vector<int>& nodes) {
148+
for(auto& node: nodes) {
149+
std::cout<<node<<", ";
150+
}
151+
std::cout<<"; ";
152+
});
153+
}

algorithm/binary_tree.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,4 +173,9 @@ void invoke_binary_search_tree();
173173
*/
174174
void invoke_right_side_view();
175175

176+
/*
177+
102. Binary Tree Level Order Traversal: https://leetcode.com/problems/binary-tree-level-order-traversal
178+
*/
179+
void invoke_level_order_traversal();
180+
176181
#endif /* BINARY_TREE_HPP */

algorithm/main.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@
1717
#include "graph.hpp"
1818

1919
int main(int argc, const char* argv[]) {
20-
invoke_right_side_view();
20+
invoke_rotate_image();
21+
22+
// invoke_level_order_traversal();
23+
24+
// invoke_right_side_view();
2125

2226
// invoke_longest_palindromic_substring();
2327

algorithm/number.cpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -979,6 +979,11 @@ nums1: [1,3], nums2: [2] => Output: 2.0
979979
nums1: [1,2], nums2: [3,4] => Output: 2.50000
980980
981981
nums1: [1,3,4,5], nums: [2,3,6,7] => Output: 3.50000
982+
Process:
983+
Total elements: 8 -> even
984+
mid_index = ((8/2)-1) => [3+1]/2 = 7/2 = 3.5
985+
986+
nums1: [4,5,6,7], nums2: [0,1,2,3]
982987
*/
983988
double median_of_two_sorted_arrays(std::vector<int>& nums1, std::vector<int>& nums2) {
984989
double output = 0.0;
@@ -1546,3 +1551,41 @@ void invoke_two_sum() {
15461551
auto output = two_sum(input, 22);
15471552
std::cout<<"The indices of two sums are: "<<output[0]<<", "<<output[1]<<std::endl;
15481553
}
1554+
1555+
/*
1556+
Input: Output:
1557+
[1,2,3] [7,4,1]
1558+
[4,5,6] => [8,5,2]
1559+
[7,8,9] [9,6,3]
1560+
Process:
1561+
1562+
Reverse the input => [7, 8, 9]
1563+
[4, 5, 6]
1564+
[1, 2, 3]
1565+
R0C1
1566+
[7, 8, 9]R0C2
1567+
R1C0 [4, 5, 6]R1C2
1568+
R2C0 [1, 2, 3]
1569+
R2C1
1570+
Swap the symmetrical parts
1571+
*/
1572+
void rotate_image(std::vector<std::vector<int>>& input) {
1573+
std::reverse(input.begin(), input.end());
1574+
for(int row = 0; row < input.size(); ++row) {
1575+
for(int column = row + 1; column < input[row].size(); ++column) {
1576+
std::swap(input[row][column], input[column][row]);
1577+
}
1578+
}
1579+
}
1580+
void invoke_rotate_image() {
1581+
std::vector<std::vector<int>> input = {
1582+
{1,2,3},
1583+
{4,5,6},
1584+
{7,8,9},
1585+
};
1586+
rotate_image(input);
1587+
std::cout<<"The rotated matrix is: "<<std::endl;
1588+
std::for_each(input.begin(), input.end(), [](std::vector<int> row) {
1589+
std::cout<<row[0]<<", "<<row[1]<<", "<<row[2]<<std::endl;
1590+
});
1591+
}

algorithm/number.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,4 +294,9 @@ void invoke_two_sum_ii();
294294
*/
295295
void invoke_two_sum();
296296

297+
/*
298+
48. Rotate Image: https://leetcode.com/problems/rotate-image
299+
*/
300+
void invoke_rotate_image();
301+
297302
#endif /* NUMBER_HPP */

0 commit comments

Comments
 (0)