philosyang.com

102. Binary Tree Level Order Traversal

 1# Definition for a binary tree node.
 2# class TreeNode:
 3#     def __init__(self, val=0, left=None, right=None):
 4#         self.val = val
 5#         self.left = left
 6#         self.right = right
 7class Solution:
 8    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
 9        if not root:
10            return []
11
12        dq = deque([(root, 0)])  # node, level
13        last_level = 0
14        result = []
15        level_result = []
16
17        while dq:
18            node, level = dq.popleft()
19            if level > last_level:
20                last_level = level
21                result.append(level_result)
22                level_result = []
23            level_result.append(node.val)
24            if node.left:
25                dq.append((node.left, level + 1))
26            if node.right:
27                dq.append((node.right, level + 1))
28
29        result.append(level_result)
30
31        return result

level-wise iter:

 1# Definition for a binary tree node.
 2# class TreeNode:
 3#     def __init__(self, val=0, left=None, right=None):
 4#         self.val = val
 5#         self.left = left
 6#         self.right = right
 7class Solution:
 8    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
 9        if not root:
10            return []
11
12        dq = deque([root])
13        result = []
14
15        while dq:
16            level_result = []
17            for _ in range(len(dq)):
18                node = dq.popleft()
19                level_result.append(node.val)
20                if node.left:
21                    dq.append(node.left)
22                if node.right:
23                    dq.append(node.right)
24            result.append(level_result)
25
26        return result

#Neetcode150 #Tree #Python