LeetCode/NeetCode

BFS: 102. Binary Tree Level Order Traversal

hyunkookim 2025. 1. 16. 13:00

102. Binary Tree Level Order Traversal

 

# 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]]:
        if not root: # root 없으면
            return []

        res = []

        q = deque([root])
        # level = 0
        while len(q) > 0:
            sub = []
            # print('level: ', level)
            for _ in range(len(q)):
                node = q.popleft()
                if node.left:
                    q.append(node.left)
                if node.right:
                    q.append(node.right)
                sub.append(node.val)
            res.append(sub)
            # level+=1
        return res

 

# 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]]:
        # bfs -> 큐로
        if not root:
            return []

        res = []

        que = deque([root])
        while(que):
            l = len(que)
            sub = []
            for i in range(l):
                node = que.popleft()
                sub.append(node.val)

                if node.left:
                    que.append(node.left)
                if node.right:
                    que.append(node.right)
            res.append(sub)

        return res

 

최종 코드

# 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]]:
        # 레벨마다 다른 list로.. -> BFS 너비우선탐색
        res = []
        if not root:
            return res

        def bfs(node):
            level=0

            q = deque([node])

            while q:
                sub_res = []
                for i in range(len(q)):
                    # 꺼내고 출력
                    n = q.popleft()
                    sub_res.append(n.val)

                    if n.left:
                        q.append(n.left)
                    if n.right:
                        q.append(n.right)
                res.append(sub_res)
                level +=1

        bfs(root)
        return res