題目描述:
請實現一個函數按照之字形順序打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右到左的順序打印,第三行再按照從左到右的順序打印,其他行以此類推。
參考代碼:
public List<List<Integer>> levelOrder(TreeNode root) {
LinkedList<List<Integer>> res = new LinkedList<>();//存放結果的列表
LinkedList<TreeNode> queue = new LinkedList<>();//設置一個隊列
if(root!= null)queue.add(root);//頭結點入隊
while(!queue.isEmpty()){//隊不爲null,出隊
LinkedList<Integer> list = new LinkedList<>();//結果列表中的元素類型爲List
for(int i = queue.size(); i > 0; i--){//這裏循環爲size~1,這樣可以將每一層的元素全部出隊,不能寫成1~size,這樣的話size一直在變化,會出錯
TreeNode node = queue.poll();//元素出隊
if(res.size() % 2 == 0)list.addLast(node.val);//res中還是存列表,當有偶數個列表時,新的列表插入隊尾;
else list.addFirst(node.val);//res中還是存列表,當有奇數個列表時,新的列表插入隊頭,這樣就實現了反轉;
if(node.left != null)queue.add(node.left);//左結點進隊
if(node.right != null)queue.add(node.right);//右節點進隊
}
res.add(list);//最後list進res隊列
}
return res;
}