From 09f9b834e19879a496d102db557847ca5e6e59a8 Mon Sep 17 00:00:00 2001 From: mike <59136831+Mike0121@users.noreply.github.com> Date: Thu, 2 May 2024 19:28:23 +0900 Subject: [PATCH 1/2] 102. Binary Tree Level Order Traversal.md https://leetcode.com/problems/binary-tree-level-order-traversal/description/ --- ...102. Binary Tree Level Order Traversal.md" | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 "\347\253\266\346\212\200\343\203\227\343\203\255\345\260\261\346\264\273\351\203\250PR\347\224\250/102. Binary Tree Level Order Traversal.md" diff --git "a/\347\253\266\346\212\200\343\203\227\343\203\255\345\260\261\346\264\273\351\203\250PR\347\224\250/102. Binary Tree Level Order Traversal.md" "b/\347\253\266\346\212\200\343\203\227\343\203\255\345\260\261\346\264\273\351\203\250PR\347\224\250/102. Binary Tree Level Order Traversal.md" new file mode 100644 index 0000000..189cce1 --- /dev/null +++ "b/\347\253\266\346\212\200\343\203\227\343\203\255\345\260\261\346\264\273\351\203\250PR\347\224\250/102. Binary Tree Level Order Traversal.md" @@ -0,0 +1,88 @@ +15分で1回目は解けず、どのようにして同じ階層のノードを取り出して処理し、次の階層に移動するかが整理できませんでした。 +各階層から値を列挙した後に、その回数分for文を回すのは、BFSの基本ができていないから思いつかなかった(考えられなかった)のかなと思います。 + +### 1回目 +時間計算量: O(N) +空間計算量: O(N + 正解分) +```python +class Solution: + def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: + if not root: + return [] + + result = [] + next_level_nodes = deque() + next_level_nodes.append(root) + + while next_level_nodes: + same_level_nodes = [] + for i in range(len(next_level_nodes)): + node = next_level_nodes.popleft() + same_level_nodes.append(node.val) + + if node.left: + next_level_nodes.append(node.left) + + if node.right: + next_level_nodes.append(node.right) + + result.append(same_level_nodes) + + return result +``` + + +理屈が頭の中にある程度整理されていれば、余計な改行が減る気がしました。 + + ### 2回目 + ```python + class Solution: + def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: + if not root: + return [] + + result = [] + next_level_nodes = deque() + next_level_nodes.append(root) + + while next_level_nodes: + same_level_nodes = [] + for _ in range(len(next_level_nodes)): + node = next_level_nodes.popleft() + same_level_nodes.append(node.val) + if node.left: + next_level_nodes.append(node.left) + if node.right: + next_level_nodes.append(node.right) + + result.append(same_level_nodes) + return result +``` + +next_level_nodes, same_level_valuesは、next_level, same_levelでも良いかと思った。 + + ### 3回目 + ```python +class Solution: + def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: + if not root: + return [] + + result = [] + next_level_nodes = deque() + next_level_nodes.append(root) + + while next_level_nodes: + same_level_values = [] + + for _ in range(len(next_level_nodes)): + node = next_level_nodes.popleft() + same_level_values.append(node.val) + if node.left: + next_level_nodes.append(node.left) + if node.right: + next_level_nodes.append(node.right) + result.append(same_level_values) + + return result + ``` From 7b5b2b7dfd5d3ea3fa6e57dc50527169c860cb39 Mon Sep 17 00:00:00 2001 From: mike <59136831+Mike0121@users.noreply.github.com> Date: Thu, 2 May 2024 20:30:36 +0900 Subject: [PATCH 2/2] Update 102. Binary Tree Level Order Traversal.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit listによる解法を追加 --- ...102. Binary Tree Level Order Traversal.md" | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git "a/\347\253\266\346\212\200\343\203\227\343\203\255\345\260\261\346\264\273\351\203\250PR\347\224\250/102. Binary Tree Level Order Traversal.md" "b/\347\253\266\346\212\200\343\203\227\343\203\255\345\260\261\346\264\273\351\203\250PR\347\224\250/102. Binary Tree Level Order Traversal.md" index 189cce1..c37f32b 100644 --- "a/\347\253\266\346\212\200\343\203\227\343\203\255\345\260\261\346\264\273\351\203\250PR\347\224\250/102. Binary Tree Level Order Traversal.md" +++ "b/\347\253\266\346\212\200\343\203\227\343\203\255\345\260\261\346\264\273\351\203\250PR\347\224\250/102. Binary Tree Level Order Traversal.md" @@ -86,3 +86,31 @@ class Solution: return result ``` + + +### 4回目 (listによる解答) +```python +class Solution: + def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: + if not root: + return [] + + level_ordered_values = [] + current_level_nodes = [root] + + while current_level_nodes: + same_level_values = [] + next_level_nodes = [] + + for i in range(len(current_level_nodes)): + node = current_level_nodes[i] + same_level_values.append(node.val) + if node.left: + next_level_nodes.append(node.left) + if node.right: + next_level_nodes.append(node.right) + current_level_nodes = next_level_nodes + level_ordered_values.append(same_level_values) + + return level_ordered_values +```