周末说说二叉树之重构
程序员文章站
2022-05-06 21:38:23
...
老师在讲这个根据前序,中序的结果重建二叉树的时候,事实上是给出了流程图的,但递归的方法更简单:
然后看看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逼,我并不这么认为,饱汉不知饿汉饥,作为一个不会编程的手艺人,任何培训都是一个梳理知识体系的机会,此外,我并非科班,又是个大专,大家认为理所当然的东西可能在我这里就是个空白,所以我并不认为这没有意义。我必须抓住一切机会,抓住任何渠道,不断学习。
此外,在这个高度内卷的时代,没有学历,退休以后是拿不到国家承诺的退休金的,证书多拿一个是一个,虽大势上于事无补,多一分钱是一分钱吧。
在这个培训中,我觉得关系代数这个比较有趣,我之前没接触过这个领域,这也算弥补了我的一个知识空白,此外就是数据结构了,本文就是其中一例。
浙江温州皮鞋湿,下雨进水不会胖。
下一篇: LeetCode0141. 环形链表
推荐阅读