LeetCode 0103 Binary Tree Zigzag Level Order Traversal
阿新 • • 發佈:2022-05-10
1. 題目描述
2. Solution 1
1、思路分析
使用BFS+遞迴,逐層遍歷樹,若當前層level為奇數,頭插結點;若當前level為偶數,尾插結點。
2、程式碼實現
package Q0199.Q0103BinaryTreeZigzagLevelOrderTraversal; import DataStructure.TreeNode; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class Solution { /* 1. O(n) solution by using LinkedList along with ArrayList. So insertion in the inner list and outer list are both O(1), 2. Using BFS and creating new lists when needed. */ public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> result = new ArrayList<>(); travel(root, result, 0); return result; } private void travel(TreeNode cur, List<List<Integer>> result, int level) { if (cur == null) return; if (result.size() <= level) result.add(new LinkedList<>()); List<Integer> curLevel = result.get(level); if (level % 2 == 0) curLevel.add(cur.val); // level為偶數,尾插 else curLevel.add(0, cur.val); // level為奇數,頭插 travel(cur.left, result, level + 1); travel(cur.right, result, level + 1); } } /* 中文社群,另解: 1. 正常層次遍歷;2. 遍歷1. 結果, level為奇數,reverse. */
3、複雜度分析
時間複雜度: O(n)
空間複雜度: O(n)