【LeetCode】103. Binary Tree Zigzag Level Order Traversal 二叉樹的鋸齒形層次遍歷(Medium)(JAVA)每日一題
阿新 • • 發佈:2020-12-27
技術標籤:LeetCode 每日一題二叉樹佇列leetcode面試資料結構
【LeetCode】103. Binary Tree Zigzag Level Order Traversal 二叉樹的鋸齒形層次遍歷(Medium)(JAVA)
題目地址: https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/
題目描述:
Given a binary tree, return the zigzag level order traversal of its nodes’ values. (ie, from left to right, then right to left for the next level and alternate between).
For example:
Given binary tree [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its zigzag level order traversal as:
[
[3],
[20,9],
[15,7]
]
題目大意
給定一個二叉樹,返回其節點值的鋸齒形層次遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。
解題方法
- 這一題其實就是二叉樹的層序遍歷,只是在每一層的時候加了一個逆序和順序的判斷
- 二叉樹層序遍歷:用一個佇列儲存當前這一層所有的節點;下一層取出上一次的所有節點,然後把不為空的節點再按序加進佇列裡,就是當前層的所有節點了;不斷迴圈,直到所有層的節點遍歷結束為止
class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<>(); if (root == null) return res; Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); int count = 1; boolean flag = true; List<Integer> list = new ArrayList<>(); while (queue.size() > 0) { TreeNode node = queue.poll(); count--; if (flag) { list.add(node.val); } else { list.add(0, node.val); } if (node.left != null) queue.offer(node.left); if (node.right != null) queue.offer(node.right); if (count == 0) { res.add(list); list = new ArrayList<>(); count = queue.size(); flag = !flag; } } return res; } }
執行耗時:1 ms,擊敗了98.42% 的Java使用者
記憶體消耗:38.7 MB,擊敗了49.52% 的Java使用者
![](https://img.796t.com/res/2020/12-09/16/b6631381964e83c42e084ea5a505572e.jpg)