BFS實現從上往下打印二叉樹

題目描述

從上往下打印出二叉樹的每一個節點,同層節點從左至右打印java

深度優先搜索算法(Breadth-First-Search)

深度優先算法是一種圖形搜索算法。簡單的說,BFS是從根節點開始,沿着樹(圖)的寬度遍歷樹(圖)的節點。若是全部節點均被訪問,則算法停止。通常用隊列數據結構來輔助實現BFS算法。算法

算法步驟

1. 首先將根節點放入隊列中。
2. 從隊列中取出第一個節點,並檢驗它是否爲目標。
若是找到目標,則結束搜尋並回傳結果。
不然將它全部還沒有檢驗過的直接子節點加入隊列中。
3. 若隊列爲空,表示整張圖都檢查過了——亦即圖中沒有欲搜尋的目標。結束搜尋並回傳「找不到目標」。
4. 重複步驟2數據結構

代碼實現

public ArrayList<Integer> printFromTopToBottom(TreeNode root) {
		if (root == null)
			return new ArrayList<Integer>();
		ArrayList<Integer> list = new ArrayList<Integer>();
		ArrayDeque<TreeNode> queue = new ArrayDeque<TreeNode>();
		// 首先將根節點放入隊列中
		queue.offer(root);
		while (!queue.isEmpty()) {// 隊列不空,還有節點未搜索
			// 根節點出隊
			TreeNode current = queue.poll();
			// 將根節點放入結果集中
			list.add(current.val);
			if (current.left != null) {// 左節點不空,先搜索左節點
				// 先將左節點放入隊列
				queue.offer(current.left);
			}
			if (current.right != null) {// 右節點不空,搜索右節點
				// 再將右節點放入隊列
				queue.offer(current.right);
			}
		}
		return list;
	}

	public class TreeNode {
		int val = 0;
		TreeNode left = null;
		TreeNode right = null;

		public TreeNode(int val) {
			this.val = val;
		}
	}
相關文章
相關標籤/搜索