樹和二叉樹(二)

2021-06-16 23:23:19 字數 3862 閱讀 7771

二叉樹的遍歷

遍歷是任何型別均有的操作,

對線性結構而言,只有一條搜尋路

徑(因為每個結點均只有乙個後繼),

故不需要另加討論。而二叉樹是非

線性結構,

每個結點有兩個後繼,

則存在如何遍歷即按什麼樣的搜尋

路徑遍歷的問題。

二叉樹而言,可以有兩條搜尋路徑:

1.先上後下的按層次遍歷;

2.先左(子樹)後右(子樹)的遍歷;

二、先左後右的遍歷演算法

(根)序的遍歷演算法

中(根)序的遍歷演算法

後(根)序的遍歷演算法

先(根)序的遍歷演算法:

若二叉樹為空樹,則空操作;否則,

1)訪問根結點;

2先序

遍歷左子樹;

3先序

遍歷右子樹。

列:前序遍歷序列:a b d c

中(根)序的遍歷演算法

若二叉樹為空樹,則空操作;否則,

1中序

遍歷左子樹;

2)訪問根結點;

3中序

遍歷右子樹。

中序遍歷序列:bd  a  c

後(根)序的遍歷演算法:

若二叉樹為空樹,則空操作;否則,

1後序

遍歷左子樹;

2後序

遍歷右子樹;

3)訪問根結點。

後序遍歷序列: d b c a

二:遍歷演算法的應用舉例

演算法的遞迴描述(先序遍歷)

void      preorder ( bitree        t )

}

1、統計二叉樹中葉子結點的個數演算法基本思想:先序(或中序或後序)遍歷二叉樹,在遍歷過程中查詢葉子結點,並計數由此,需在遍歷演算法中增添乙個「計數」的引數,並將演算法中訪問結點的操作改為:若是葉子,則計數器增1。

void countleaf (bitree t,  int& count) // if

} // countleaf

l將二叉樹分為五種形態進行討論:

求葉子結點個數

分析:① 0; ② 1; ③ l; ④ r; ⑤ l+r

簡化:③④⑤可合併成⑤

求葉子結點個數

int leafcount ( bintree bt )

2、求二叉樹的深度分析:① 0;② 1;

③ 1+l;

④ 1+r;

⑤ 1+max(l,r)。

簡化:②③④⑤可合併成⑤。

求二叉樹的深度

int depth ( bintree bt )

三:層次遍歷二叉樹

層次遍歷順序為:

ab   c   d    e   f

特點:

先被遍歷的結點的孩子先於後遍歷的結點的孩子遍歷

二叉樹 滿二叉樹和完全二叉樹

二叉樹是一種很重要的非線性資料結構,它是樹結構的一種重要的型別 它不是樹結構的特殊情況 其特徵是每個節點最多有兩個子樹。二叉樹的特點 二叉樹每個結點最多有 2個子結點,樹則無此限制 二叉樹中 結點的子樹 分成左子樹和右子樹,即使某結點只有一棵子樹,也要指明該子樹是左子樹,還是右子樹,就是說 二叉樹是...

樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹

目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...