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