給定一個二叉樹,返回其節點值的鋸齒形層序遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。
解題思路:使用層次遍歷,將LinkedList當作雙向鏈表使用。ide
class Solution { //LinkeList雙向鏈表,add插入到尾部,,push插入到頭部 public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<>(); if(root == null ) return res; Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.add(root); int level = 0; while(!queue.isEmpty()){ int size = queue.size(); LinkedList<Integer> temp = new LinkedList<Integer>(); for(int i = 0; i < size; i++){ root = queue.poll(); if((level&1) == 1) //若是是奇數層,就push插入到雙向鏈表的頭部 temp.push(root.val); else{ //若是是偶數層,就add插入到雙向鏈表尾部 temp.add(root.val); } if(root.left != null){ queue.add(root.left); } if(root.right != null){ queue.add(root.right); } } // if((level&1) == 1){ // Collections.reverse(temp); // } res.add(temp); level++; } return res; } }