leetcode 103. 二叉树的锯齿形层次遍历

1. 见注释.

# 参考之前另一道层次遍历的题
class Solution:
    def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
        if not root:
            return [] 

        layers = [] 
        layer = 0
        next_layer = [root] 
        
        while next_layer:
            # layers.append([]) 
            layer_length = len(next_layer)

            temp = []                       # temp 用来保存这一层的全部的节点值 
            for i in range(layer_length):
                node = next_layer.pop(0)
                # 1. 我觉得正确的做法是在这里来调整,但是总是有点模糊。
                # if layer % 2 == 0:
                #     node = next_layer.pop(0)
                # else:
                #     node = next_layer.pop()
                # layers[layer].append(node.val)
                temp.append(node.val)
                if node.left:
                    next_layer.append(node.left)
                if node.right:
                    next_layer.append(node.right)
            
            # 2. 但是最终结果这里也是可以调整的。
            if layer % 2 == 0:
                layers.append(temp)
            else:
                layers.append(temp[::-1])
            layer += 1
        
        return layers

你可能感兴趣的:(leetcode 103. 二叉树的锯齿形层次遍历)