原題如下:
求二叉樹的深度
描述:給出乙個字串形式表達的二叉樹,求出指定節點深度。
輸入的樹形結構字串格式為:
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...