class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def zigzagLevelOrder(root): if not root: return [] result = [] current_level = [root] left_to_right = True while current_level: level_values = [] next_level = [] for node in current_level: level_values.append(node.val) if node.left: next_level.append(node.left) if node.right: next_level.append(node.right) if not left_to_right: level_values.reverse() result.append(level_values) current_level = next_level left_to_right = not left_to_right return result # Tree structure: # 1 # / \ # 2 3 # / \ # 4 5 root = TreeNode(1, TreeNode(2, TreeNode(4)), TreeNode(3, None, TreeNode(5))) print(zigzagLevelOrder(root))
The traversal starts left to right at level 0: [1].
At level 1, it goes right to left: [3, 2].
At level 2, it goes left to right again: [4, 5].
class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def zigzagLevelOrder(root): if not root: return [] result = [] current_level = [root] left_to_right = True while current_level: level_values = [] next_level = [] for node in current_level: level_values.append(node.val) if node.left: next_level.append(node.left) if node.right: next_level.append(node.right) if not left_to_right: level_values.reverse() result.append(level_values) current_level = next_level left_to_right = not left_to_right return result root = TreeNode(10) print(zigzagLevelOrder(root))
Since there is only one node, the traversal returns a list with one list containing that node's value.
def zigzagLevelOrder(root): if not root: return [] result = [] current_level = [root] left_to_right = True while current_level: level_values = [] next_level = [] for node in current_level: level_values.append(node.val) if node.left: next_level.append(node.left) if node.right: next_level.append(node.right) if left_to_right: level_values.reverse() result.append(level_values) current_level = next_level left_to_right = not left_to_right return result # Tree with root only class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right root = TreeNode(1) print(zigzagLevelOrder(root))
The code reverses the level values when left_to_right is True, but it should reverse when left_to_right is False.
This causes the first level to be reversed incorrectly.
Two lists help process nodes level by level and allow reversing the order of values at alternate levels.
class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def zigzagLevelOrder(root): if not root: return [] result = [] current_level = [root] left_to_right = True while current_level: level_values = [] next_level = [] for node in current_level: level_values.append(node.val) if node.left: next_level.append(node.left) if node.right: next_level.append(node.right) if not left_to_right: level_values.reverse() result.append(level_values) current_level = next_level left_to_right = not left_to_right return result root = TreeNode(10, TreeNode(6, TreeNode(3), TreeNode(8, TreeNode(7))), TreeNode(15, None, TreeNode(20, TreeNode(17), TreeNode(25)))) print(zigzagLevelOrder(root))
Level 0 (left to right): [10]
Level 1 (right to left): [15, 6]
Level 2 (left to right): [3, 8, 20]
Level 3 (right to left): [7, 17, 25] reversed to [25, 17, 7] but since direction is right to left, we reverse the collected values, so output is [7, 17, 25].
