樹的層次遍歷


說到樹的層次遍歷,就應該提到廣度優先搜索算法------廣度優先搜索算法(Breadth-First-Search),又譯作寬度優先搜索,或橫向優先搜索,簡稱BFS,是一種圖形搜索算法。

         可以說樹層次遍歷是廣度優先遍歷的一種直接應用吧,比較廣度優先搜索是圖形的一種搜索算法,圖形是一種比較大的概念,但這個和深度優先齊名的算法,在樹的層次遍歷引用中,並沒有那么復雜,或許是因為用在樹的遍歷,而非圖吧。

 

       樹的層次遍歷,故名思議,在一棵樹中,把節點從左往右,一層一層的,從上往下,遍歷輸出,這里要用到一種很重要的數據結構,隊列。

          步驟如下:

       1.首先將根節點放入隊列中。 
       2.當隊列為非空時,循環執行步驟3到步驟5,否則執行6; 
       3.出隊列取得一個結點,訪問該結點; 
       4.若該結點的左子樹為非空,則將該結點的左子樹入隊列; 
       5.若該結點的右子樹為非空,則將該結點的右子樹入隊列; 
       6.結束。

import java.util.ArrayDeque;

class TreeNode {

	private TreeNode left = null;
	private TreeNode right = null;
	Integer val;

	public TreeNode(Integer val) {
		this.val = val;
	}

	public void setLeft(TreeNode node) {
		this.left = node;
	}

	public void setRight(TreeNode node) {
		this.right = node;
	}

	public static void BFSOrder(TreeNode node) {

		if (node == null) {
			return;
		}

		ArrayDeque<TreeNode> queue = new ArrayDeque<>();

		queue.add(node);

		while (!queue.isEmpty()) {

			// 一定要放判定之前,否則會出大事
			node = queue.poll();
			System.out.print(node.val + " ");
			if (node.left != null) {
				queue.add(node.left);
			}
			if (node.right != null) {
				queue.add(node.right);
			}

			// System.out.println(queue.poll().val + " ");
		}
	}
}

public class Solution {
	public static void main(String[] args) {
		TreeNode n1 = new TreeNode(1);
		TreeNode n2 = new TreeNode(2);
		TreeNode n3 = new TreeNode(3);
		TreeNode n4 = new TreeNode(4);
		TreeNode n5 = new TreeNode(5);
		TreeNode n6 = new TreeNode(6);
		TreeNode n7 = new TreeNode(7);

		n1.setLeft(n2);
		n1.setRight(n3);
		n2.setLeft(n4);
		n2.setRight(n5);
		n3.setLeft(n6);
		n4.setLeft(n7);

		TreeNode.BFSOrder(n1);
	}
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM