手撕算法——搞定BFS

BFS的答題模板

BFS,廣度優先搜索
答題模板
(1)創建隊列
(2)將頭結點放入隊列
(3)當隊列不爲空的時候進行遍歷

Queue<T> queue=new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
	T node = queue.poll();
	for(...){
		//將符合條件的節點加入隊列中
	}
}

層次遍歷二叉樹

題目描述:
給你一個二叉樹,請你返回其按 層序遍歷 得到的節點值。 (即逐層地,從左到右訪問所有節點)。

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        /*
        典型的層次遍歷的問題
        */
        List<List<Integer> > lists=new ArrayList<>();
        if(root==null){
            return lists;
        }

        Queue<TreeNode> queue=new LinkedList<>();
        queue.add(root);
        int number=0;

        while(!queue.isEmpty()){
            number=queue.size();//記錄當前層的數目
            List<Integer>  list=new ArrayList<>();
            for(int i=0;i<number;i++){
                TreeNode node=queue.poll();
                list.add(node.val);
                if(node.left!=null)
                    queue.add(node.left);
                if(node.right!=null)
                    queue.add(node.right);
            }
            lists.add(list);
        }

        return lists;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章