103. Binary Tree Zigzag Level Order Traversal - Medium

前往題目

想法

  • BFS,但不小心寫錯了🤣導致有奇怪的bug

思路

  1. BFS
  2. 判斷奇數行還是偶數行決定是否反轉(不能直接判斷然後加入,這樣會造成queue裡的順序也不一樣,就沒辦法在下一個level把順序倒轉回來)

Code

class Solution {
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<List<Integer>>();

        // Base case
        if (root == null) return res;
        if (root.left == null && root.right == null) {
            res.add(new ArrayList<>(Arrays.asList(root.val)));
            return res;
        }

        Queue<TreeNode> q = new LinkedList();
        q.offer(root);

        while (!q.isEmpty()) {
            int size = q.size();
            ArrayList<Integer> elements = new ArrayList();

            // Go through the level
            for (int i = 0; i < size; ++i) {
                // Current node
                TreeNode curNode = q.poll();
                elements.add(curNode.val);
                if (curNode.left != null) q.offer(curNode.left);
                if (curNode.right != null) q.offer(curNode.right);
            }

            // Odd number level should reverse
            if (res.size() % 2 == 1) Collections.reverse(elements);
            res.add(elements);
        }
        return res;
    }
}

2024/10/31

  • 寫出來了,不過小Bug,還用了額外的boolean來判斷

103. Binary Tree Zigzag Level Order Traversal - Medium
https://f88083.github.io/2024/01/11/103-Binary-Tree-Zigzag-Level-Order-Traversal-Medium/
作者
Simon Lai
發布於
2024年1月11日
許可協議