103. Binary Tree Zigzag Level Order Traversal

改进版flag,在添加元素的时候加在前面,而不是用reverse整个数组。

public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
    Queue<TreeNode> q = new LinkedList<>();
    List<List<Integer>> res = new LinkedList<>();
    if (root == null) return res;
    boolean flag = true;
    q.offer(root);

    while (!q.isEmpty()) {
        int levelNum = q.size();
        List<Integer> subRes = new LinkedList<>();
        for (int i = 0; i < levelNum; i++) {
            TreeNode node = q.poll();
            if (node.left != null) q.offer(node.left);
            if (node.right != null) q.offer(node.right);
            if (flag) subRes.add(node.val);
            else subRes.add(0, node.val);
        }
        flag = !flag;
        res.add(subRes);
    }
    return res;
}

原来的impl,这里最好用deque+popleft

    def zigzagLevelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        res = []
        if not root: return res
        queue = [root]
        flag = False

        while queue:
            val = []
            for _ in range(len(queue)):
                node = queue.pop(0)
                if node.left: queue.append(node.left)
                if node.right: queue.append(node.right)
                val.append(node.val)

            if flag:
                val.reverse()
                flag = False
            else:
                flag = True
            res.append(val)
        return res

results matching ""

    No results matching ""