Given a binary tree, implement a function to perform a specific traversal or transformation.
For this task, return the tree's zigzag level-order traversal. Represent each node as a dictionary with val, left, and right keys, where missing children are null. Return a list of levels, alternating traversal direction from left to right and right to left.
def zigzag_level_order(root):