LeetCode102:二叉樹的層次遍歷
阿新 • • 發佈:2018-12-26
思路:用一個佇列和列表來實現。主要是兩層迴圈,外層迴圈用來獲取佇列大小size以及初始化一個列表list(用來儲存當前層的節點),內層迴圈用來依次從佇列中從左到右的取出當前層節點放到list中,並將當前節點的左右子結點插入到隊尾。每次從佇列中取出一個節點的時候都要對size進行自減操作,直到當size==0時,也就是當前層所有的節點都從佇列中取出後,再重新開始外層迴圈,計算下一層的結點數size,並初始化一個用來儲存當前層節點的列表list,進行新一輪的迴圈,以此類推。直到最後佇列為空的時候,說明當前層沒有節點了,演算法結束。
public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<List<Integer>>(); if(root==null) return res; Queue<TreeNode> q = new ArrayDeque<TreeNode>(); TreeNode left = null; TreeNode right = null; TreeNode temp = root; q.add(root); int size = 1; while(true){ size = q.size(); ArrayList<Integer> inner = new ArrayList<Integer>(); while(size!=0){ temp = q.poll(); inner.add(temp.val); size--; left = temp.left; right = temp.right; if(left!=null) q.add(left); if(right!=null) q.add(right); } res.add(inner); if(q.size()==0) break; } return res; }