From 9ad7de8dd530341285caaa261a0e4ce837ccdbd2 Mon Sep 17 00:00:00 2001 From: Kaushik Narayan R Date: Tue, 17 Oct 2023 08:40:31 -0700 Subject: [PATCH] day 18: 102-binary-tree-level-order-traversal --- .../driver.cpp | 15 +++++++ .../soln.cpp | 42 +++++++++++++++++++ .../soln.hpp | 17 ++++++++ 3 files changed, 74 insertions(+) create mode 100644 102-binary-tree-level-order-traversal/driver.cpp create mode 100644 102-binary-tree-level-order-traversal/soln.cpp create mode 100644 102-binary-tree-level-order-traversal/soln.hpp diff --git a/102-binary-tree-level-order-traversal/driver.cpp b/102-binary-tree-level-order-traversal/driver.cpp new file mode 100644 index 0000000..7debfdf --- /dev/null +++ b/102-binary-tree-level-order-traversal/driver.cpp @@ -0,0 +1,15 @@ +#include "soln.hpp" + +int main() +{ + TreeNode n7 = TreeNode(7); + TreeNode n15 = TreeNode(15); + TreeNode n20 = TreeNode(20, &n15, &n7); + TreeNode n5 = TreeNode(5); + TreeNode n9 = TreeNode(9, &n5, nullptr); + TreeNode n3 = TreeNode(3, &n9, &n20); + vector> answer = {{3}, {9, 20}, {5, 15, 7}}; + Solution soln; + cout << "Level-order traversal correct? " << soln.test(&n3, answer) << endl; + return 0; +} \ No newline at end of file diff --git a/102-binary-tree-level-order-traversal/soln.cpp b/102-binary-tree-level-order-traversal/soln.cpp new file mode 100644 index 0000000..141b3cc --- /dev/null +++ b/102-binary-tree-level-order-traversal/soln.cpp @@ -0,0 +1,42 @@ +#include "soln.hpp" + +vector> Solution::levelOrder(TreeNode *root) +{ + vector tree_queue; + vector> traversal; + if (root == nullptr) + { + return traversal; + } + TreeNode *current = root; + tree_queue.push_back(current); + while (!tree_queue.empty()) + { + traversal.push_back(vector()); + for (auto node : tree_queue) + { + if (node != nullptr) + { + traversal.back().push_back(node->val); + } + } + int level_size = tree_queue.size(); + for (int i = 0; i < level_size; i++) + { + if (tree_queue[0] != nullptr) + { + if (tree_queue[0]->left) + tree_queue.push_back(tree_queue[0]->left); + if (tree_queue[0]->right) + tree_queue.push_back(tree_queue[0]->right); + } + tree_queue.erase(tree_queue.begin()); + } + } + return traversal; +} + +bool Solution::test(TreeNode *root, vector> answer) +{ + return levelOrder(root) == answer; +} diff --git a/102-binary-tree-level-order-traversal/soln.hpp b/102-binary-tree-level-order-traversal/soln.hpp new file mode 100644 index 0000000..92c67ac --- /dev/null +++ b/102-binary-tree-level-order-traversal/soln.hpp @@ -0,0 +1,17 @@ +#include +using namespace std; +struct TreeNode +{ + int val; + TreeNode *left; + TreeNode *right; + TreeNode() : val(0), left(nullptr), right(nullptr) {} + TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} + TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} +}; +class Solution +{ +public: + vector> levelOrder(TreeNode *root); + bool test(TreeNode *root, vector> answer); +}; \ No newline at end of file