32-3 從上到下打印二叉樹 III
面試題32 - III. 從上到下打印二叉樹 III
難度中等15
請實現一個函數按照之字形順序打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右到左的順序打印,第三行再按照從左到右的順序打印,其他行以此類推。
例如:
給定二叉樹: [3,9,20,null,null,15,7],
3 / \ 9 20 / \ 15 7
返回其層次遍歷結果:
[ [3], [20,9], [15,7] ]
思路:其實和前邊的相同 添加一個標誌位 第一次不需要反轉,第二次需要反轉,第三次不需要反轉,依序就可以反轉。
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
boolean reverse = false;//設置是否需要反轉
while(!queue.isEmpty()){
List<Integer> list = new ArrayList<>();
int cnt = queue.size();
while(cnt-- > 0){
TreeNode t = queue.poll();
if(t == null){
continue;
}
list.add(t.val);
queue.add(t.left);
queue.add(t.right);
}
if(reverse){
Collections.reverse(list);
}
reverse = !reverse;
if(list.size() != 0)
result.add(list);
}
return result;
}