天天看點

LeetCode 102.二叉樹的層次周遊

給你一個二叉樹,請你傳回其按 層序周遊 得到的節點值。 (即逐層地,從左到右通路所有節點)。

與資料結構上的層次周遊思想基本相同,都是使用隊列實作(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;
    }