日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二叉树(2)——遍历的非递归实现

發布時間:2023/12/31 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二叉树(2)——遍历的非递归实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>


算法概述

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

對于中序遍歷來說,非遞歸的算法比遞歸算法的效率要高的多。其中序遍歷算法的實現的過程如下:

(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

轉載于:https://my.oschina.net/verynix/blog/365910

總結

以上是生活随笔為你收集整理的二叉树(2)——遍历的非递归实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。