樹的相關小測試 題解

2022-06-12 20:27:11 字數 1758 閱讀 2046

第一題和第三題起初想法都是構建樹的相關資料結構,但通過挖掘題目的性質,尤其是輸出要求,無需搭建一棵完整的樹。

給定一顆二叉樹,要求從下至上按層遍歷二叉樹,每層的訪問順序是從左到右,每一層單獨輸出一行。輸入形式為廣義表,它表示的二叉樹,結點元素型別為整型,且都大於0,例如:1( 2( 3 ( 4, 5 ) ), 6( 7, 8( 9, 10 ) ) )。現要你從下至上,列印每一層的結點元素值,且每層訪問順序是從左到右。

題目要求的廣義表輸入,可以聯絡括號匹配。通過層數來將節點分類儲存,既能夠適應廣義表,又能夠直接層次遍歷。

#include #include #include #include #include using namespace std;

const int maxn = 1e5;

string str;

vectortree[maxn]; //tree[i]表示第i層(從0計數)的一串節點

int main()

else

maxdep = max(maxdep, dep); //記錄最大深度

}for (int i = maxdep; i >= 0; i--)

return 0;

}

使用前序字串構建乙個二叉樹,並輸出這棵樹中序遍歷。字串使用「#」表示孩子為空的情況。eg:abd#g###ce##f##

題目中的前序遍歷序列,與以往不同的是已經給定空節點。由此得到的序列與深搜方向基本一致(順序不一定完全吻合),一開始對字串向右遍歷,實際上就是往樹的左側鏈進行遍歷,一旦遍歷過程中遇到#就立即轉向到其兄弟節點(即右節點),繼續深入搜尋。

#include #include #include #include #include #include using namespace std;

const int maxn = 1e5;

string str;

char tree[maxn];

int build(int pos, int rt)

int last = build(pos + 1, rt << 1); //建左子樹,同時取得最近的葉節點對應於字串的下標

last = build(last + 1, rt << 1 | 1); //建右子樹,與上同理

return last;

}void dfs(int rt)

int main()

已知輸入一串正整數,正整數之間用空格鍵分開,請建立乙個哈夫曼樹,以輸入的數字為葉節點,求這棵哈夫曼樹的帶權路徑長度。

往上建樹的模擬過程中,對每一次節點合併得到的新節點權值進行累加,其實就是對帶權路徑累加

#include #include #include #include #include #include using namespace std;

const int maxn = 100;

priority_queue< int, vector, greater> myque;

int tot = 0;

int main()

int sum = 0;

while(myque.size() > 1)

printf("%d\n", sum);

}

19 2 18 測試題解

題太水了懶得乙個乙個發 t1 題意就是5000000個點,10000000條邊,邊權只有1或2,求最短路 我的做法 先bb一句,要開始考試的時候l讓我和gigo,gsy去樓下考,我說看一下題再決定,然後他說 你看,第一題是裸的最短路。又因為我懶得搬東西去樓下並且不想承受爆零 墊底的壓力,於是就留在樓...

7 21模擬測試題解

用nlogn求出最長不下降子串行長度然後判長度是否有n 1就行了 因為每個數只能用一次,所以前i個數所能組成的最大和為a 1 a 2 a i 若a i 1 a 1 a 2 a i 1 則因為比a 1 a 2 a i 大的下乙個數必 a i 1 所以a 1 a 2 a i 1為答案。include i...

2018 10 25 模擬測試題解

目錄問題 b 蜀傳之單刀赴會 問題 c 吳傳之火燒連營 本篇題解也發表於zwcblog作者是同乙個人 眾所周知,劉備在長阪坡上與他的一眾將領各種開掛,硬生生從曹操手中逃了出去,隨後與孫權一 燒赤壁 占有荊益 成就霸業。而曹操則在赤壁一敗後再起不能,終生無力南下。建安二十五年 220年 曹操已到風燭殘...