DFS 堆的二叉樹結構 15輕院校賽 J 堆

2021-09-06 23:00:39 字數 1364 閱讀 7461

堆:堆最重要的性質就是兒子的值一定不小於父親的值。除此之外,樹的節點是按從上到下、從左到右的順序緊湊排列的。

本題的堆是一種叫做二叉堆的資料結構。

《挑戰程式設計》 p71

對於這題,首先要模擬出二叉樹的結構,根據題意通過value儲存每個節點的權值(值)

再將每兩節點之間是否有邊連線,儲存為tree,通過輸入的兩節點a,b,即儲存tree[a][b] = 1

1. 在接下來的深搜中,只需搜尋tree == 1的節點

2. 同時,在搜尋中還需要滿足最小堆(堆)的性質,即value[節點] <= value[子節點]

若符合以上1.2兩個條件,則繼續向深處(子節點)搜尋

即dfs(深度優先搜尋)的性質:列舉出所有可能,每種可能搜尋至,直到邊界,或不符合條件為止。(不撞南牆不回頭)

依舊,還需要乙個陣列來儲存,當前的節點是否被搜尋過,即see = 1

1 #include2 #include3

using

namespace

std;

4#define max(a,b) (a > b ? a : b)

5#define min(a,b) (a < b ? a : b)

6const

int maxn = 410;7

intvalue[maxn],tree[maxn][maxn],see[maxn],ac,m;

8void dfs(int

k)17}18

}19intmain()

30for(i = 1;i < m;i++)

43 ac = 0

;44 dfs(1);//

從根節點開始

45 cout << (ac ? "

no" : "

yes") <

46//

printf(ac ? "no\n" : "yes\n") ; 47}

48return0;

49 }

二叉樹 結構體

size large align center 二叉樹 結構體 align size 程式名稱 利用結構體建立二叉樹 written by hewei 2011 05 30 include using namespace std define max 20 定義儲存二叉樹節點的結構體 struct ...

平衡二叉樹結構

對二叉樹做深度優先遍歷,遞迴過程中 終止條件 當dfs越過葉子節點時候,返回高度0.返回數值 從低至上,返回每個節點root 為根節點的字數最大高度 左右字數的中最 當我們發現有乙個例子,左右子樹高度差 1的情況時,代表此樹不是平衡二叉樹。當發現不是平衡二叉樹時,後面的高度計算都沒有意義了,因此一路...

樹結構 二叉樹

二叉樹 如果書中的每個節點最多只有兩個子節點,這樣的樹就叫做二叉樹 1.二叉樹的重要特性 二叉樹第 i 層的最大節點數為 2 i 1 i 1 深度為 k 的二叉樹最大節點總數為 2 k 1 對於任何乙個非空二叉樹t,若n0表示葉節點的個數,n2為度為2的非空葉節點個數,那麼兩者滿足 n0 n2 1 ...