二叉樹及其遍歷

2021-08-03 22:53:15 字數 2119 閱讀 4676

二叉樹是乙個很重要的儲存結構,所以和大家分享一下我對二叉樹的理解並結合**,希望讓大家都能對二叉樹有乙個最清晰的認識

首先,二叉樹是每個節點最多有兩個子樹的樹結構,這是二叉樹的定義,二叉樹的結構如下圖

可以看到二叉樹必要的是根節點,也就是a,每個節點都會有左子節點和右子節點,那麼從b開始看,它又是乙個二叉樹,所以b也叫作a的左子樹,同理c叫作a的右子樹

了解到這些以後,我們就可以實踐寫一棵二叉樹了,下面是我寫的乙個小demo

從這個btree的類可以看到,一顆btree,一定要有左子樹,右子樹,至於k和v是我們用來獲取該節點的值所用的,這裡我重寫了tostring方法,目的在於輸出以後可以通過json的形式明了的向大家展示樹結構

二叉樹定義完了,我們要再寫乙個二叉樹的工具類,我這裡命名為btreeutil,我們看下面的**

這個工具類包括獲取某個節點的value,增加節點,以及前序,中序,後序三種遍歷,我們首先看增加節點,下面是**片段

可以看到第43行,如果樹為空,我們就new乙個然後返回

第46行我把傳入樹的根節點與要增加的節點做了乙個比較,如果相等,那麼直接替換這個節點的值,如果要增加的的節點小於該樹的根節點,則取該樹的左子樹進行遞迴,直到沒有該節點或者等於該節點,同樣如果該節點大於該樹的根節點則用該樹的右子樹繼續進行遞迴,直到沒有該節點或者等於該節點。我們寫個test類測試一下

首先構造btree,建立根節點,然後使用工具類進行節點增加,然後我們列印一下樹,得到樹裡面的資料,而後我放到json檢視工具裡,是下面的樣子

可以看到12是根節點,他的left是8,right是19,8的left是5,8的right沒有,5的left是3,5的right是6,19的left是15,19的right是21,就是下面這個樣子

我們已經建立了一棵樹,下面我們獲取一下樹上面的節點,看下**

同樣適用遞迴,如果樹是空的,則沒查詢到,返回null,如果不為空,比較樹的根節點和傳入的key的大小,如果等於則命中,返回當前樹,如果key小於根節點,則適用樹的左子樹進行遞迴,如果key大於根節點則適用樹的右子樹進行遞迴,直到找到等於或查詢不到

我們看下test類

可以看到通過3我們可以找到以3為根節點的樹,他的value就是我們要找的該節點的值,為t3

最後我們看一下二叉樹的遍歷,先引入一下概念

前序遍歷: 

1.訪問根節點 

2.前序遍歷左子樹 

3.前序遍歷右子樹 

中序遍歷: 

1.中序遍歷左子樹 

2.訪問根節點 

3.中序遍歷右子樹 

後序遍歷: 

1.後序遍歷左子樹 

2.後序遍歷右子樹 

3.訪問根節點

直接看**吧

完全按照概念所描述的,分別在最開始,中間,最後遍歷二叉樹,我們看下test類

我們可以發現中序遍歷,其實是有序的輸出了二叉樹的值

二叉樹及其遍歷

滿二叉樹肯定是完全二叉樹,完全二叉樹不一定是滿二叉樹 二叉樹的遍歷 先序遍歷 也叫做先根遍歷 前序遍歷,首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。在遍歷左 右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹,如果二叉樹為空則返回。中序遍歷 首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。...

二叉樹及其應用 二叉樹遍歷

給定二叉樹的廣義表表示,構造二叉樹並輸出二叉樹的四種遍歷順序。輸入說明 輸入僅一行,該行僅由 以及大小寫字元構成的二叉樹的廣義表表示,字串長度不超過100。輸出說明 在接下來的四行中依行輸出二叉樹的四種遍歷 輸入樣列 a b d,c e,f h 輸出樣列 abdcefh dbaecfh dbehfc...

排序二叉樹及其遍歷

所謂建立排序二叉樹就是,就是將各結點資料元素順序插到一棵二叉樹中,在插入的過程中,始終保持二叉樹中每個結點的值都大於其左子樹上每個結點的值,而小於或等於其右子樹上每個結點的值,每個結點資訊包括結點資料 結點值 左子樹指標 右子樹指標。程式執行的過程中,bt指標始終指向根結點,p指標指向當前已找到的結...