二叉樹(2)——遍曆的非遞迴實現

來源:互聯網
上載者:User

演算法概述

遞迴演算法簡潔明了、可讀性好,但與非遞迴演算法相比要消耗更多的時間和儲存空間。為提高效率,我們可採用一種非遞迴的二叉樹遍曆演算法。非遞迴的實現要藉助棧來實現,因為堆棧的先進後出的結構和遞迴很相似。

對於中序遍曆來說,非遞迴的演算法比遞迴演算法的效率要高的多。其中序遍曆演算法的實現的過程如下:

(1).初始化棧,根結點進棧;

(2).若棧非空,則棧頂結點的左孩子結點相繼進棧,直到null(到葉子結點時)退棧;訪問棧頂結點(執行visit操作)並使棧頂結點的右孩子結點進棧成為棧頂結點。

(3).重複執行(2),直至棧為空白。

演算法實現

 

package datastructure.tree;import datastructure.stack.ArrayStack;import datastructure.stack.Stack;public class UnrecOrderBTree implements Visit{private Stack stack = new ArrayStack();private BTree bt;@Overridepublic void visit(BTree btree) {System.out.print("\t" + btree.getRootData());}public void inOrder(BTree boot) {stack.clear();stack.push(boot);while(!stack.isEmpty()) {//左孩子結點進棧while((bt = ((BTree)(stack.peek())).getLeftChild()) != null) {stack.push(bt);}//如果該結點沒有右孩子,則逐級往上出棧while(!stack.isEmpty() &&!( (BTree)stack.peek() ).hasRightTree()) {bt = (BTree)stack.pop();visit(bt);}//如果該結點有右孩子,則右孩子進棧if(!stack.isEmpty() && ( (BTree)stack.peek() ).hasRightTree()){bt = (BTree)stack.pop();visit(bt);stack.push(bt.getRightChild());}}}}

測試:要構建的樹

package datastructure.tree;/** * 測試二叉樹 * @author Administrator * */public class BTreeTest {public static void main(String args[]) {BTree btree = new LinkBTree('A');BTree bt1, bt2, bt3, bt4;bt1 = new LinkBTree('B');btree.addLeftTree(bt1);bt2 = new LinkBTree('D');bt1.addLeftTree(bt2);bt3 =  new LinkBTree('C');btree.addRightTree(bt3);bt4 =  new LinkBTree('E');bt3.addLeftTree(bt4);bt4 =  new LinkBTree('F');bt3.addRightTree(bt4);RecursionOrderBTree order = new RecursionOrderBTree();System.out.println("\n中序遍曆:");order.inOrder(btree);}}

結果如下:

中序遍曆:
D B  A E
C   F

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.