日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
程序員應(yīng)知應(yīng)會之一文讀懂二叉樹的四種遍歷

樹是編程中的一種最為重要的數(shù)據(jù)結(jié)構(gòu)了,應(yīng)用范圍很廣。比如說人們常用的操作系統(tǒng),如Windows和Linux,它們的文件管理系統(tǒng)都是樹型結(jié)構(gòu)的。而這其中二叉樹又是應(yīng)用最廣的樹,因此也是很多程序員入門時學(xué)習(xí)的主要數(shù)據(jù)結(jié)構(gòu)。

成都創(chuàng)新互聯(lián)于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目做網(wǎng)站、成都做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元劍川做網(wǎng)站,已為上家服務(wù),為劍川各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792

從外表上來看,二叉樹非常簡單,每個節(jié)點延伸出兩個子節(jié)點,一層一層地延續(xù)下去,像人們的祖譜一樣,非常容易理解。

二叉樹相關(guān)的編程中,二叉樹的遍歷是最為常見的一種,對于普通人來說,如果想遍歷上圖的二叉樹的話,很多人都會很直白地一層一層讀下去,于是遍歷出來的結(jié)果就是ABCDEFG。非常直觀。

但是計算機(jī)的計算方式和人們的思維方式是不一樣的,這種層次遍歷對于人來說非常好理解,但是對于計算機(jī)來說,并不是很好理解。

所以為了更符合計算機(jī)的思考方式,研究人員提出了先序遍歷、中序遍歷、后序遍歷三種算法。這三種算法都是如何遍歷二叉樹的呢?我們來看一下。

一、先序遍歷

先序遍歷(Pre-order),也叫前序遍歷,按照根左右的順序沿一定路徑經(jīng)過路徑上所有的結(jié)點。在二叉樹中,對每個節(jié)點都是,先根后左再右。也就是,根左右。具體實現(xiàn)方法如下:

public static void preOrder(BinTreeNode t) {
    if (null == t ) return;
    System.out.println(t.getData());
    preOrder(t.getlChild());
    preOrder (t.getrChild());
}

對于上圖的二叉樹,遍歷結(jié)果為,abdcegf。

二、中序遍歷

中序遍歷,也叫中根遍歷、中序周游。中序遍歷首先遍歷左子樹,然后訪問根結(jié)點,最后遍歷右子樹。也就是,左根右。具體實現(xiàn)方法如下:

public static void inOrder(BinTreeNode t) {
    if (null == t ) return;
    inOrder(t.getlChild());
    System.out.println(t.getData());
    inOrder (t.getrChild());
}

對于上圖的二叉樹,遍歷結(jié)果為:dbagefc。

三、后序遍歷

后序遍歷(LRD)也叫做后根遍歷、后序周游。后序遍歷首先遍歷左子樹,然后遍歷右子樹,最后訪問要節(jié)點。也就是,左右根。具體實現(xiàn)方法如下:

public static void postOrder(BinTreeNode t) {
    if (null == t ) return;
    postOrder(t.getlChild());
    postOrder (t.getrChild());
    System.out.println(t.getData());
}

對于上圖的二叉樹,遍歷結(jié)果為:dbgefca。

可以看到,上面的三種算法中,區(qū)別就是在于打印節(jié)點數(shù)據(jù)(應(yīng)用節(jié)點數(shù)據(jù)域)的代碼位置不一樣而已。對于計算機(jī)來說,使用遞歸算法,非常簡潔明了。

四、層次遍歷

那么更符合人們習(xí)慣的層次遍歷,計算機(jī)又需要怎樣執(zhí)行呢?我們可以看到,對于計算機(jī)而言,最大的問題在于它并不知道哪個節(jié)點屬于哪一層,因此,我們需要使用代碼記錄,每個層次的節(jié)點信息。通常情況下,我們可以使用隊列來實現(xiàn)。代碼如下:

public static void levelOrder(BinTreeNode t) {
    Queue q = new LinkedList<>();
    q.offer(t);
    while (!q.isEmpty()){
        int size = q.size();
        for (int i=0; i

打印結(jié)果為:abcdefg。

我們可以看到,對于人類來講最為簡潔明了的層次算法,對于計算機(jī)編程來說,需要的代碼量要大很多。原因在于對于人們來說直觀的約束條件,如哪個節(jié)點在哪一層,對于計算機(jī)來說并不直觀。因此,很多時候?qū)τ诔绦騿T來說,要按照計算機(jī)的思維來看問題,這樣寫出的代碼才能更符合計算機(jī)的習(xí)慣。


分享題目:程序員應(yīng)知應(yīng)會之一文讀懂二叉樹的四種遍歷
本文地址:http://www.5511xx.com/article/coosejs.html