diff --git a/binary_tree_level_order_traversal/phase1.py b/binary_tree_level_order_traversal/phase1.py new file mode 100644 index 0000000..20c0b6e --- /dev/null +++ b/binary_tree_level_order_traversal/phase1.py @@ -0,0 +1,21 @@ +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: + level_traversed_node_ids = [] + def append_by_depth(node: Optional[TreeNode], depth: int): + if not node: + return + if len(level_traversed_node_ids) == depth: + level_traversed_node_ids.append([]) + + level_traversed_node_ids[depth].append(node.val) + append_by_depth(node.left, depth + 1) + append_by_depth(node.right, depth + 1) + + append_by_depth(root, 0) + return level_traversed_node_ids diff --git a/binary_tree_level_order_traversal/phase2.py b/binary_tree_level_order_traversal/phase2.py new file mode 100644 index 0000000..76561ea --- /dev/null +++ b/binary_tree_level_order_traversal/phase2.py @@ -0,0 +1,32 @@ +# レベルごとの捜査なのでBFSが適しているというコメントがあり, そりゃそうだわの気持ちになり反省 +# 再帰で書く変な先入観みたいなのがついている気がしたので今一度なんで書くのかをしっかりと... +# seal-azarashi: https://github.com/seal-azarashi/leetcode/pull/25/files +# goto-untrapped: https://github.com/goto-untrapped/Arai60/pull/50/files +# Ryotaro25: https://github.com/Ryotaro25/leetcode_first60/pull/28/files +# BFSで解くこと, 一つの変数に二つの役割を持たさないように注意して再度実行 + +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: + level_to_nodes = [] + current_level_nodes = [root] + while current_level_nodes: + next_level_nodes = [] + node_ids = [] + for node in current_level_nodes: + if not node: + continue + node_ids.append(node.val) + next_level_nodes.append(node.left) + next_level_nodes.append(node.right) + + current_level_nodes = next_level_nodes + if len(node_ids) > 0: + level_to_nodes.append(node_ids) + + return level_to_nodes diff --git a/binary_tree_level_order_traversal/phase3.py b/binary_tree_level_order_traversal/phase3.py new file mode 100644 index 0000000..dfe70c4 --- /dev/null +++ b/binary_tree_level_order_traversal/phase3.py @@ -0,0 +1,24 @@ +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: + level_to_nodes = [] + current_level_nodes = [root] + while current_level_nodes: + node_ids = [] + next_level_nodes = [] + for node in current_level_nodes: + if not node: + continue + node_ids.append(node.val) + next_level_nodes.append(node.left) + next_level_nodes.append(node.right) + current_level_nodes = next_level_nodes + if len(node_ids) > 0: + level_to_nodes.append(node_ids) + + return level_to_nodes