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..a7ca1a1 --- /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: + num_nodes_in_level = len(node_queue) + nodes_in_level = [] + for _ in range(num_nodes_in_level): + node = node_queue.popleft() + 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_in_level) + 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): + while len(level_order) - 1 < level: + level_order.append([]) + level_order[level].append(node.val) + if node.left: + build_level_order(node.left, level + 1) + if node.right: + build_level_order(node.right, level + 1) + + build_level_order(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 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..f396cb8 --- /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: + values_in_level = [] + next_queue = deque() + while current_queue: + node = current_queue.popleft() + 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(values_in_level) + current_queue = next_queue + return level_order