週末說說二元樹之重構

2020-09-28 20:00:25

老師在講這個根據前序,中序的結果重建二元樹的時候,事實上是給出了流程圖的,但遞迴的方法更簡單:
在這裡插入圖片描述
然後看看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逼,我並不這麼認為,飽漢不知餓漢飢,作為一個不會程式設計的手藝人,任何培訓都是一個梳理知識體系的機會,此外,我並非科班,又是個大專,大家認為理所當然的東西可能在我這裡就是個空白,所以我並不認為這沒有意義。我必須抓住一切機會,抓住任何渠道,不斷學習。

此外,在這個高度內卷的時代,沒有學歷,退休以後是拿不到國家承諾的退休金的,證書多拿一個是一個,雖大勢上於事無補,多一分錢是一分錢吧。

在這個培訓中,我覺得關係代數這個比較有趣,我之前沒接觸過這個領域,這也算彌補了我的一個知識空白,此外就是資料結構了,本文就是其中一例。


浙江溫州皮鞋溼,下雨進水不會胖。