網易互娛 9 7 第二批 筆試 第二題 層次樹

2021-09-26 23:26:25 字數 2764 閱讀 2692

輸入:28

2 -1 -1

1 5 3

4 -1 6

2 -1 -1

3 0 2

2 4 7

7 -1 -1

2 -1 -1

821 6 -1

52 4 -1

80 0 3

31 7 -1

21 -1 -1

59 -1 -1

50 5 -1

48 -1 1

輸出:yes

no

網易互娛 第二批筆試第二題 層次樹 調了我乙個小時,被自己蠢哭了。

大概題意是這樣,有乙個樹以上面的形式給出,第一行n為測試用例個數,第二行為節點數m,接下來m行為每個節點的資料,行數為節點編號,第乙個數為該節點的價值,接下來兩個數為該節點的左右子節點的編號,-1表示子節點為空,如果這棵樹每一層的價值的和比上一層嚴格大於,則輸出「yes」,否則輸出「no」。

思路:剛開始想的是每個節點先構造一顆小樹,後面將所有的小樹合併成一顆大樹,最後層次遍歷判斷是否符合條件,寫到樹的融合的時候有點寫不下去了,轉而換乙個思路,先找到根節點,也就是不可能為其他節點子節點的那個節點就是根節點,然後從根節點開始查詢子節點構造一顆完整的樹,然後層次遍歷判斷並輸出結果,以下是實現**

#include "stdafx.h"

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

struct treenode

};void preorderthis(treenode* root)

cout << root->val;

preorderthis(root->left);

preorderthis(root->right);

}void creattree(treenode* root_copy, int root_l, int root_r, vector& leftindex, vector& rightindex)

if(root_r != -1)

}int main()

for (int j = 0; j < m; j++)

for (int j = 0; j < m; j++)

}} for (int j = 0; j < m; j++)

}treenode* rootnode = new treenode(rootindex);

int root_l = leftindex[rootindex];

int root_r = rightindex[rootindex];

treenode* root_copy = rootnode;

creattree(root_copy, root_l, root_r, leftindex, rightindex);

preorderthis(rootnode);

treenode* root = rootnode;

queuenode.push(root);

int num1 = 1, num2 = 0;

int sum = 0, lastsum = -1;

treenode* node = nullptr;

bool isok = true;

bool ji_cen = false;

bool ou_cen = false;

while(num1 > 0 || num2 > 0)

if (node->right)

num1--;

}if (ji_cen && sum <= lastsum)

lastsum = sum;

sum = 0;

ji_cen = false;

while(num2 > 0)

if (node->right)

num2--;

}if (ou_cen && sum <= lastsum)

lastsum = sum;

sum = 0;

ou_cen = false;

} if (isok)

else

isok = true;

} return 0;

}

第二天在網上看了一下別人的思路,發現自己還是太年輕,為啥要糾結去構造那顆樹,直接每層遍歷查詢不就完了,唉!!!!!!!!!!!!!!!!!!!!!!!!!!!!

以下是摘取的別人的實現

#include #include #include using namespace std;

typedef struct _nodenode;

vectortree; //儲存結點

queuelevel; //層序遍歷用的queue

int main()

; // 判斷是否是root 沒有parent的就是root

for(int j=0;j>v>>l>>r;

node temp;

temp.id=j;

temp.val=v;

temp.lid=l;

temp.rid=r;

tree[j]=temp;

if(l!=-1)

hasp[l]=1;

if(r!=-1)

hasp[r]=1;

}int root;

for(int j=0;j參考:

[1] 

華為勇敢星筆試題第二批(記錄)

測試用例1 輸入 tom,lily,tom,lucy,lucy,jack,tom,lucy 輸出 lucy 測試用例2 輸入 tom,lily,tom,lucy,lucy,jack,tom 輸出 tom 測試用例3 輸入 tom,lily,tom,lucy,lucy,jack,tom 違法字元 輸出...

一點資訊後端方向工程師筆試題第二批

一 不定項選擇題 1 關於http cookie的描述正確的是?a.cookie的超時時間通過服務端設定 b.session只能通過cookie的形式進行傳遞 c.一台計算機上安裝了多個瀏覽器,每個瀏覽器的cookie是單獨儲存的 d.cookie通過http header從瀏覽器傳送到服務端 2 ...

第二批37個城市設計試點名單公布

本報訊 第二批城市設計試點城市名單公布,上海 山東煙台 新疆阿勒泰等37個城市入選。近日,住房城鄉建設部下發通知,對做好試點工作提出要求。根據通知,試點工作自2017年7月開始,時間為2年。重點圍繞 創新管理制度 探索技術方法 傳承歷史文化 推動城市轉型 4方面內容開展工作。住房城鄉建設部要求,各試...