劍指Offer之從上到下打印二叉樹 III

題目描述:

請實現一個函數按照之字形順序打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右到左的順序打印,第三行再按照從左到右的順序打印,其他行以此類推。

參考代碼:

 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;
 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章