給你一個二叉樹,請你傳回其按 層序周遊 得到的節點值。 (即逐層地,從左到右通路所有節點)。
與資料結構上的層次周遊思想基本相同,都是使用隊列實作(Java中LInkedList實作了Queue接口)。這裡加了一個目前層結點個數size的變量,因為當上一層結點周遊完後,隊列中就隻剩下一層結點,是以queue.size()可以擷取目前層結點個數。
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> ret=new ArrayList<List<Integer>>();
if(root==null){
return ret;
}
Queue<TreeNode> queue=new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
int size=queue.size();
//size表示目前層結點的個數
List<Integer> list=new ArrayList<>();
for(int i=0;i<size;i++){
TreeNode temp=queue.poll();
list.add(temp.val);
if(temp.left!=null){
queue.add(temp.left);
}
if(temp.right!=null){
queue.add(temp.right);
}
}
ret.add(list);
}
return ret;
}