牛客題霸NC14二叉樹的之字形層序遍歷Java題解
阿新 • • 發佈:2020-11-27
牛客題霸NC14二叉樹的之字形層序遍歷Java題解
方法:利用佇列
解題思路:將節點加入到佇列中,利用佇列Queue的先進後出,依此彈出節點。將每次彈出節點的值儲存到一個ArrayList中(tmp),如果當前層是奇數層(從1開始),執行尾插,如果當前層是偶數層,執行頭插。如果彈出的節點有左、右子節點,則將左、右子節點加入到佇列Queue中,每一層遍歷完,將這一層的節點都加入到ArrayList<ArrayList<integer>> list 中。
import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */ public class Solution { /** * * @param root TreeNode類 * @return int整型ArrayList<ArrayList<>> */ public ArrayList<ArrayList<Integer>> zigzagLevelOrder (TreeNode root) { ArrayList<ArrayList<Integer>> res = new ArrayList<>(); Queue<TreeNode> queue = new LinkedList<>(); if(root!=null){ queue.add(root); } while(!queue.isEmpty()){ ArrayList<Integer> tmp = new ArrayList<>(); //儲存每一層節點 for(int i= queue.size();i>0;i--){ //遍歷當前層的節點 TreeNode node = queue.poll(); //彈出佇列中的節點 if((res.size()+1)%2!=0){ //res.size()+1:當前的層數,從1開始 tmp.add(node.val); // 奇數層 -> 尾插 }else{ tmp.add(0,node.val); // 偶數層 -> 頭插 } if(node.left!=null){ //如果左子節點不為空,則將其加入到佇列中 queue.add(node.left); } if(node.right!=null){ //如果左子節點不為空,則將其加入到佇列中 queue.add(node.right); } } res.add(tmp); //將這一層的節點加入到res中 } return res; } }