From c90e9ee927b79c6002701924828b3eefcb3281bc Mon Sep 17 00:00:00 2001 From: shining-ai Date: Fri, 15 Mar 2024 16:51:09 +0000 Subject: [PATCH 1/6] =?UTF-8?q?=E3=80=90Arai60=E3=80=9126=E5=95=8F?= =?UTF-8?q?=E7=9B=AE=20102.=20Binary=20Tree=20Level=20Order=20Traversal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../level_1.py | 18 +++++++++ .../level_2.py | 40 +++++++++++++++++++ .../level_3.py | 19 +++++++++ 3 files changed, 77 insertions(+) create mode 100644 arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_1.py create mode 100644 arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_2.py create mode 100644 arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_3.py diff --git a/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_1.py b/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_1.py new file mode 100644 index 0000000..79fac66 --- /dev/null +++ b/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_1.py @@ -0,0 +1,18 @@ +# BFSで解く +class Solution: + def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: + node_queue = deque([root]) + level_order = [] + while node_queue: + node_num = len(node_queue) + nodes = [] + for _ in range(node_num): + node = node_queue.popleft() + if not node: + continue + nodes.append(node.val) + node_queue.append(node.left) + node_queue.append(node.right) + if nodes: + level_order.append(nodes) + return level_order diff --git a/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_2.py b/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_2.py new file mode 100644 index 0000000..e116fdc --- /dev/null +++ b/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_2.py @@ -0,0 +1,40 @@ +# BFSで解く +# queueにNoneが入らないように修正 +class Solution: + def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: + if not root: + return [] + node_queue = deque([root]) + level_order = [] + while node_queue: + queue_length = len(node_queue) + level_nodes = [] + for _ in range(queue_length): + node = node_queue.popleft() + level_nodes.append(node.val) + if node.left: + node_queue.append(node.left) + if node.right: + node_queue.append(node.right) + level_order.append(level_nodes) + return level_order + + +# DFSで解く +class Solution: + def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: + if not root: + return [] + level_order = [] + + def build_level_order(node, level): + if len(level_order) - 1 < level: + level_order.append([]) + level_order[level].append(node.val) + if node.left: + helper(node.left, level + 1) + if node.right: + helper(node.right, level + 1) + + helper(root, 0) + return level_order diff --git a/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_3.py b/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_3.py new file mode 100644 index 0000000..7ff56ec --- /dev/null +++ b/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_3.py @@ -0,0 +1,19 @@ +# BFS +class Solution: + def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: + if not root: + return [] + node_queue = deque([root]) + level_order = [] + while node_queue: + queue_length = len(node_queue) + nodes = [] + for _ in range(queue_length): + node = node_queue.popleft() + nodes.append(node.val) + if node.left: + node_queue.append(node.left) + if node.right: + node_queue.append(node.right) + level_order.append(nodes) + return level_order From e7f475f8d633c26912c9dc50da6ee3c88074316b Mon Sep 17 00:00:00 2001 From: shining-ai Date: Fri, 15 Mar 2024 16:54:12 +0000 Subject: [PATCH 2/6] =?UTF-8?q?=E9=96=A2=E6=95=B0=E5=90=8D=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../26_102_Binary Tree Level Order Traversal/level_2.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_2.py b/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_2.py index e116fdc..2082577 100644 --- a/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_2.py +++ b/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_2.py @@ -32,9 +32,9 @@ def build_level_order(node, level): level_order.append([]) level_order[level].append(node.val) if node.left: - helper(node.left, level + 1) + build_level_order(node.left, level + 1) if node.right: - helper(node.right, level + 1) + build_level_order(node.right, level + 1) - helper(root, 0) + build_level_order(root, 0) return level_order From 92fea0f0cc5fbd7bf0a9acbe097adab02ea5a262 Mon Sep 17 00:00:00 2001 From: shining-ai Date: Fri, 15 Mar 2024 17:05:25 +0000 Subject: [PATCH 3/6] =?UTF-8?q?=E5=A4=89=E6=95=B0=E5=90=8D=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../level_2.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_2.py b/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_2.py index 2082577..6624d51 100644 --- a/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_2.py +++ b/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_2.py @@ -7,16 +7,16 @@ def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: node_queue = deque([root]) level_order = [] while node_queue: - queue_length = len(node_queue) - level_nodes = [] - for _ in range(queue_length): + num_nodes_in_level = len(node_queue) + nodes_level = [] + for _ in range(num_nodes_in_level): node = node_queue.popleft() - level_nodes.append(node.val) + nodes_level.append(node.val) if node.left: node_queue.append(node.left) if node.right: node_queue.append(node.right) - level_order.append(level_nodes) + level_order.append(nodes_level) return level_order @@ -28,7 +28,7 @@ def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: level_order = [] def build_level_order(node, level): - if len(level_order) - 1 < level: + while len(level_order) - 1 < level: level_order.append([]) level_order[level].append(node.val) if node.left: From 7a3b5dca487aab9e503583b292a7cce3dc2e5f76 Mon Sep 17 00:00:00 2001 From: shining-ai Date: Fri, 15 Mar 2024 17:05:41 +0000 Subject: [PATCH 4/6] =?UTF-8?q?=E5=A4=89=E6=95=B0=E5=90=8D=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../26_102_Binary Tree Level Order Traversal/level_2.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_2.py b/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_2.py index 6624d51..a7ca1a1 100644 --- a/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_2.py +++ b/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_2.py @@ -8,15 +8,15 @@ def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: level_order = [] while node_queue: num_nodes_in_level = len(node_queue) - nodes_level = [] + nodes_in_level = [] for _ in range(num_nodes_in_level): node = node_queue.popleft() - nodes_level.append(node.val) + nodes_in_level.append(node.val) if node.left: node_queue.append(node.left) if node.right: node_queue.append(node.right) - level_order.append(nodes_level) + level_order.append(nodes_in_level) return level_order From bf7238deedbde11cb9db8fc1ae909a3d23e54e06 Mon Sep 17 00:00:00 2001 From: shining-ai Date: Mon, 18 Mar 2024 16:01:52 +0000 Subject: [PATCH 5/6] =?UTF-8?q?BFS=E3=81=A7level=E3=82=92queue=E3=81=AE?= =?UTF-8?q?=E4=B8=AD=E8=BA=AB=E3=81=AE=E6=95=B0=E3=81=A7=E5=88=A4=E5=AE=9A?= =?UTF-8?q?=E3=81=97=E3=81=A6=E3=81=84=E3=81=9F=E9=83=A8=E5=88=86=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../level_4.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_4.py diff --git a/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_4.py b/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_4.py new file mode 100644 index 0000000..02ebd4f --- /dev/null +++ b/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_4.py @@ -0,0 +1,21 @@ +# BFS +# queueの中身の個数でレベルを判定していた部分を修正(current_queue, next_queueを使うように修正) +class Solution: + def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: + if not root: + return [] + level_order = [] + current_queue = deque([root]) + while current_queue: + nodes_in_level = [] + next_queue = deque() + while current_queue: + node = current_queue.popleft() + nodes_in_level.append(node.val) + if node.left: + next_queue.append(node.left) + if node.right: + next_queue.append(node.right) + level_order.append(nodes_in_level) + current_queue = next_queue + return level_order From 6f455d9de97b2b5c7e1a995466886966dc36d2a3 Mon Sep 17 00:00:00 2001 From: shining-ai Date: Mon, 18 Mar 2024 18:45:18 +0000 Subject: [PATCH 6/6] =?UTF-8?q?=E5=A4=89=E6=95=B0=E5=90=8D=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../26_102_Binary Tree Level Order Traversal/level_4.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_4.py b/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_4.py index 02ebd4f..f396cb8 100644 --- a/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_4.py +++ b/arai60/21-29_Tree_BT_BST/26_102_Binary Tree Level Order Traversal/level_4.py @@ -7,15 +7,15 @@ def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: level_order = [] current_queue = deque([root]) while current_queue: - nodes_in_level = [] + values_in_level = [] next_queue = deque() while current_queue: node = current_queue.popleft() - nodes_in_level.append(node.val) + values_in_level.append(node.val) if node.left: next_queue.append(node.left) if node.right: next_queue.append(node.right) - level_order.append(nodes_in_level) + level_order.append(values_in_level) current_queue = next_queue return level_order