LeetCode--103. Binary Tree Zigzag Level Order Traversal
阿新 • • 發佈:2019-01-03
題目連結:https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/
這個是接著上一篇寫的,思路有點像,不過要新增一個標誌符來判斷是從左往右加入連結串列中,還是從右往左,這個跟上一篇差不多。我用的是層序數的奇偶性,也可以用邏輯變數。這裡不贅述!
程式碼如下:
class Solution { public static List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> ans=new LinkedList<List<Integer>>(); if(root==null) return ans; Queue<TreeNode> q=new LinkedList<TreeNode>(); q.add(root); int nums=1; int next_nums=0; int depth=1; while(!q.isEmpty()) { List<Integer> tmp_list=new LinkedList<Integer>(); if(depth%2!=0) { for(int k=nums;k>0;k--) { TreeNode tmp=q.poll(); tmp_list.add(tmp.val); if(tmp.left!=null) { q.add(tmp.left); next_nums++; } if(tmp.right!=null) { q.add(tmp.right); next_nums++; } } } else { for(int k=nums;k>0;k--) { TreeNode tmp=q.poll(); tmp_list.add(0,tmp.val); if(tmp.left!=null) { q.add(tmp.left); next_nums++; } if(tmp.right!=null) { q.add(tmp.right); next_nums++; } } } ans.add(tmp_list); nums=next_nums; next_nums=0; depth++; } return ans; } }