老師在講這個根據前序,中序的結果重建二元樹的時候,事實上是給出了流程圖的,但遞迴的方法更簡單:
然後看看left和right的構造就行了:
那麼程式碼是不是也很簡單呢:
struct node *rebuild(int *Preorder, int *Inorder, int StartPre, int EndPre, int StartMid, int EndMid)
{
struct node *root;
int distance;
if (StartPre > EndPre || StartMid > EndMid) {
return NULL;
}
for (distance = 0; distance < EndMid; distance++) {
if (Inorder[StartMid + distance] == Preorder[StartPre]) {
break;
}
}
root = (struct node *)malloc(sizeof(struct node));
root->val = Preoder[StartPre];
root->left = rebuild(Preorder, Inorder, StartPre + 1, StartPre + distance, StartMid, distance - 1);
root->right = rebuild(Preorder, Inorder, StartPre + distance + 1, EndPre, distance + 1, EndMid);
return root;
}
還有不到一個半月就要軟考了,三個月前我報了個軟考培訓班,身邊的同事朋友們都笑我,覺得這個沒有意義很low逼,我並不這麼認為,飽漢不知餓漢飢,作為一個不會程式設計的手藝人,任何培訓都是一個梳理知識體系的機會,此外,我並非科班,又是個大專,大家認為理所當然的東西可能在我這裡就是個空白,所以我並不認為這沒有意義。我必須抓住一切機會,抓住任何渠道,不斷學習。
此外,在這個高度內卷的時代,沒有學歷,退休以後是拿不到國家承諾的退休金的,證書多拿一個是一個,雖大勢上於事無補,多一分錢是一分錢吧。
在這個培訓中,我覺得關係代數這個比較有趣,我之前沒接觸過這個領域,這也算彌補了我的一個知識空白,此外就是資料結構了,本文就是其中一例。
浙江溫州皮鞋溼,下雨進水不會胖。