Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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