二叉樹遍歷(循環+隊列實現層序遍歷)

上篇文章介紹了使用遞歸遍歷二叉樹的三種遍歷方式,分別是,前序遍歷,中序遍歷,後序遍歷,由於遞歸代碼簡單明瞭,因此只介紹了遞歸遍歷,下面介紹下第四種遍歷形式,層序遍歷!咱們使用循環加隊列來作層序遍歷

 

 

----------------------------------我是分割線------------------------------------java

咱們先定義一棵普通的二叉樹,以下圖

 

 

 

層序遍歷:若樹爲空,則空操做返回,不然從樹的第一層,根結點開始訪問,從上而下逐層遍歷,在同一層中,從左往右的順序對結點進行訪問node

層序遍歷的上面二叉樹的結果爲:ABCDEFGHIJKspa

JAVA代碼以下:code

//層序遍歷	
public static void levelOrder(Node node){
		//若是結點爲空,返回
		if(node==null){
			return;
		}
		//建立一個隊列
		Queue<Node> queue = new LinkedList<>();
		//將根結點放入隊列
		queue.add(node);

		/**
		 * 循環判斷隊列是否爲空,
		 * 若是非空,將結點的左右孩子放入隊列,而且取出data域的數據
		 * 爲空的話,結束遍歷
		 */
		while (!queue.isEmpty()){
			//取出結點
			Node poll = queue.poll();
			//打印結點信息
			System.out.println(poll.getData());
			//若是當前結點的左孩子不爲空,放入隊列
			if(poll.getLeft()!=null){
				queue.add(poll.getLeft());
			}
			//若是當前結點的又孩子不爲空,放入隊列
			if(poll.getRight()!=null){
				queue.add(poll.getRight());
			}
		}
	}

 

 

其實思想很簡單,代碼註釋已經表達了想法,從根結點開始,先放入隊列,而後循環判斷隊列是否爲空,非空,取出結點,打印數據域,而且依次將左孩子,右孩子放入隊列,藉助隊列的特性,先進先出,來進行層序遍歷,最後隊列爲空,循環中止,遍歷結束遞歸

 

 

 

到這,文章就結束了!隊列

以上,均爲本人我的理解,比較簡單的理解,或許跟各位看官理解的有出入,歡迎指正交流get

歡迎轉載,請註明出處跟做者,謝謝!class

相關文章
相關標籤/搜索