1. 程式人生 > >LeetCode102:二叉樹的層次遍歷

LeetCode102:二叉樹的層次遍歷

 

思路:用一個佇列和列表來實現。主要是兩層迴圈,外層迴圈用來獲取佇列大小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;
    }