遍歷二叉樹的應用 輸出二叉樹所有葉結點和求高度

2021-08-19 18:43:22 字數 1526 閱讀 5693

利用二叉樹的遍歷方法,我們可以求得一棵二叉樹的很多東西,例如我們可以遍歷求得一棵二叉樹的所有葉結點,到我們找到乙個結點的左右子樹都為空了,它就是其中乙個葉結點,我們把它儲存起來,在遍歷完一棵二叉樹後,我們就可以找到所有的葉結點。同理,我們也可以通過遍歷一棵二叉樹的所有節點後,求出一棵二叉樹的高度。

首先我們來看如何用先序遍歷的方式求得一棵二叉樹的所有葉結點。我們可以用遞迴思想,就像遍歷一樣的遞迴方法,只是改變其中的一些條件。回顧一下遞迴遍歷的方法是只要結點存在就輸出,而現在我們要遍歷找出葉結點,葉結點的與其他結點的區別就在於葉結點的左右子樹都為空,所以在遞迴遍歷時我們就可以加上乙個條件:判斷當結點的左右子樹都為空時才輸出結點,這樣就可以通過遍歷找出所有葉結點了。**也和遍歷的**相似:

第61行用乙個

if判斷如果(bt—

>left==null && bt

—>right==null

)也就是判斷如果左子樹和右子樹都為空的話,就訪問輸出結點的

data

,否則就遞迴遍歷左子樹和右子樹。

同理我們可以改變這條判斷結點左右子樹是否為空的語句的位置,得到中序遍歷方式和後序遍歷方式輸出所有葉結點的**:

接下來到求一棵二叉樹的高度。求一棵二叉樹的高度,我們可以這樣想,一棵二叉樹的高度,等於根結點的左或右子樹的最高的高度再加一。也就是說,如果根左子樹高度比右子樹高,那麼該二叉樹的高度等於左子樹的高度加一,如果右子樹的高度比左子樹高,那麼二叉樹的高度就等於右子樹的高度加一。所以,我們可以通過遞迴遍歷完乙個二叉樹的所有左子樹和右子樹,得到該二叉樹的所有左子樹的最大高度和右子樹的最大高度,比較後取高度大的值,然後加一就可以得到一棵二叉樹的高度了。那麼方法是如何實現?同樣是遞迴的方法,因為我們先把左右子樹都遍歷完一遍後再通過比較取得高度的最大值,所以可以通過改變二叉樹的後序遍歷的**來實現求得二叉樹的高度:

我們定義變數max來儲存最大高度,lh和

rh分別表示左子樹的高度和右子樹的高度,第

63行通過遞迴遍歷左子樹,獲得左子樹的高度,然後遞迴遍歷右子樹獲得右子樹的高度,接著65到

71行就判斷左子樹的高度和右子樹的高度,數值更大的那個就賦給

max,最後72行

return

(max+1

),就得到一棵二叉樹的高度了。

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

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

二叉樹的應用 二叉樹遍歷的應用

在以上討論的遍歷演算法中,訪問結點的資料域資訊,即操作visite bt data 具有更一般的意義,需根據具體問題,對bt 資料進行不同的操作。下面介紹幾個遍歷操作的典型應用。search bt,x 在bt 為二叉樹的根結點指標的二叉樹中查詢資料元素x。查詢成功時返回該結點的指標 查詢失敗時返回空...

構建二叉樹 遍歷二叉樹

陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...