From 6a9216da91164299f9652bfb97d93ddd90236f6f Mon Sep 17 00:00:00 2001 From: ryosuketc <43229670+ryosuketc@users.noreply.github.com> Date: Tue, 13 Jan 2026 05:56:38 +0900 Subject: [PATCH] 102. Binary Tree Level Order Traversal https://leetcode.com/problems/binary-tree-level-order-traversal/ --- 102_binary_tree_level_order_traversal/memo.md | 21 +++++++++++ .../step1.cpp | 34 +++++++++++++++++ .../step2.cpp | 37 +++++++++++++++++++ .../step3.cpp | 0 4 files changed, 92 insertions(+) create mode 100644 102_binary_tree_level_order_traversal/memo.md create mode 100644 102_binary_tree_level_order_traversal/step1.cpp create mode 100644 102_binary_tree_level_order_traversal/step2.cpp create mode 100644 102_binary_tree_level_order_traversal/step3.cpp diff --git a/102_binary_tree_level_order_traversal/memo.md b/102_binary_tree_level_order_traversal/memo.md new file mode 100644 index 0000000..e26e2cf --- /dev/null +++ b/102_binary_tree_level_order_traversal/memo.md @@ -0,0 +1,21 @@ +# 102. Binary Tree Level Order Traversal + +https://leetcode.com/problems/binary-tree-level-order-traversal/ + +## Comments + +### step1 + +* Arai60 で解いた問題 +* https://github.com/ryosuketc/leetcode_arai60/pull/26/files +* とりあえず各 level ごとに処理する方法。queue を使おうかと思ったが nodes (current level) と next_nodes の入れ替えだけで pop などするわけではなかったので vector のまま書いた +* とはいえ久々に解いたので12:00くらいかかっった。ちょっとlevelの区切りをどうやって見つけるんだったか悩んでしまった。 + +### step2 + +* 一応 queue を使う方法。 +* あとは上記自分の解答のように (node, level) の tuple を queue に入れていく方法もあるが、level ごとに処理する今回の方法がよりわかりやすいとは思う。 + +### step3 + +* skip diff --git a/102_binary_tree_level_order_traversal/step1.cpp b/102_binary_tree_level_order_traversal/step1.cpp new file mode 100644 index 0000000..68b4e07 --- /dev/null +++ b/102_binary_tree_level_order_traversal/step1.cpp @@ -0,0 +1,34 @@ +/** + * Definition for a binary tree node. + * 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) { + if (!root) return {}; + std::vector> result; + std::vector nodes = {root}; // current-level nodes. + std::vector next_nodes; // next-level nodes. + + while (!nodes.empty()) { + std::vector current_level_values; + for (auto node : nodes) { + current_level_values.push_back(node->val); + if (node->left) next_nodes.push_back(node->left); + if (node->right) next_nodes.push_back(node->right); + } + result.push_back(current_level_values); + nodes = next_nodes; + next_nodes.clear(); + } + + return result; + } +}; diff --git a/102_binary_tree_level_order_traversal/step2.cpp b/102_binary_tree_level_order_traversal/step2.cpp new file mode 100644 index 0000000..d4ff1de --- /dev/null +++ b/102_binary_tree_level_order_traversal/step2.cpp @@ -0,0 +1,37 @@ +/** + * Definition for a binary tree node. + * 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) {} + * }; + */ + +#include + +class Solution { +public: + vector> levelOrder(TreeNode* root) { + if (!root) return {}; + std::vector> result; + std::queue nodes; + nodes.push(root); + + while (!nodes.empty()) { + int level_size = nodes.size(); + std::vector current_level_values; + for (int i = 0; i < level_size; ++i) { + TreeNode* node = nodes.front(); + nodes.pop(); + current_level_values.push_back(node->val); + if (node->left) nodes.push(node->left); + if (node->right) nodes.push(node->right); + } + result.push_back(current_level_values); + } + return result; + } +}; diff --git a/102_binary_tree_level_order_traversal/step3.cpp b/102_binary_tree_level_order_traversal/step3.cpp new file mode 100644 index 0000000..e69de29