華為2016春招機試題

2021-07-10 18:45:32 字數 1331 閱讀 4371

原題如下:

求二叉樹的深度

描述:給出乙個字串形式表達的二叉樹,求出指定節點深度。

輸入的樹形結構字串格式為:

1、以父節點、左子樹、右子樹表示的二叉樹;每個父節點不會超過兩個子節點;

2、樹的每乙個節點採用單個字母表示;樹的層次採用數字表示,樹根的層次為1,下一層為2,不會超過9層;

3、字串以「節點名稱 層次數 節點名稱 層次數…」的形式出現,同乙個父節點下,先出現的為左子樹。

例如字串「a1b2c2d3e3f3」生成一棵如下的樹:

a/   \

b     c

/ \   / 

d   e f     

節點a的深度為3,節點b的深度是2,節點f的深度是1

執行時間限制:無限制

記憶體限制:無限制

輸入:一行字串,表示乙個二叉樹

一行字串,乙個字元乙個節點,輸入確保字元不會存在重複節點

輸出:指定節點的深度,如果節點不存在,返回0;整數之間用空格隔開

樣例輸入:

a1b2c2d3e3f3

ab樣例輸出:

3 2網上有人貼出同樣題目,並寫出自己的**。但他們的**大都存在問題。關鍵在於題目並沒有說按照從根到葉子的順序輸入節點,也沒有說是滿二叉樹。因此那些答案只能過一部分測試樣例。因此比較好的方法應當是按照題意建樹(這裡採用vector二維陣列來儲存節點),並深搜左子樹計算深度。

下面貼出自己**(通過全部測試):

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

vectorv[11];

int finddepth(int treelevel, int nodeindex, int depth) else

}int main()

int len1 = query.size();

int depth;

vectorans;

/* test*/

/*for (int i = 1; i <= maxdepth; i++) */

for (int i = 0; i < len1; i++) }}

ans.push_back(depth);

}int ll = ans.size();

if (ll == 0) return 0;

for (int i = 0; i < ll-1; i++) cout << ans[i] << " ";

cout << ans[ll-1] << endl;

return 0;

}

2016華為春招機試

三道程式設計題,第一道是輸出連續字串連續重複 的字元和它的個數。第二道 求兩個大數相除的餘數 考試的時候只想到了兩個數相減,導致提交結果一直是時間超出限制。回來後重新思考了一下,寫了個新程式,同時把求商的演算法也寫了一下,編譯通過,但不知道能不能在華為測試系統通過。include stdafx.h ...

2020華為春招機試題目回憶

剛剛做完題目,趁著還記得題目,記錄一下。第一題,給兩個ip和掩碼,計算這兩個ip在不在乙個子網。第二題,給0 1矩陣,計算由1組成的最大的正方形的面積。第三題,打怪獸,每個怪獸有個數值標記,從起點開始,必須按數值大小順序打,矩陣上0不能走,1代表沒有怪獸,2的就是怪獸,打過了就變成1。問能不能打到最...

華為2016機試題

輸入一串用空格隔開的數字串,對於數字串的奇數字按公升序排序,偶數字按降序排序.示例輸入 4 6 2 3 6 7 8 1 處理過程 奇數字 4 2 6 8 公升序排序結果 2 4 6 8 偶數字 6 3 7 1 降序排序結果 7 6 3 1 include include using namespac...