
数据结构与算法
offer敲门砖
五张牌
这个作者很懒,什么都没留下…
展开
-
二叉树前中后序遍历之迭代算法之最强统一风格
前序遍历: vector<int> preorderTraversal(TreeNode* root) { if(!root) return {}; vector<int> result; stack<TreeNode*> stk; stk.push(root); while(!stk.empty()){ TreeNode* node = stk.top();原创 2021-08-27 21:23:35 · 158 阅读 · 0 评论 -
链表排序-观“归并排序”有感
先贴上LeetCode原题链接: 链表排序 注意:原题要求是时间复杂度O(nlogn),空间复杂度O(1) 两种解法时间复杂度都是O(nlogn),递归的空间复杂度为O(n),迭代的空间复杂度为O(1) 解法一:归并排序(递归) 关于递归的通用思路: 先找终止条件,如该题中终止条件head == NULL || head->next ==NULL 思考返回值,每一级递归向上要返回什么信息 单步怎么写,也是最关键的步骤,在该题中也就是如何将两个排好序的链表合并。 通过递归实现链表归并排序,有以下两个原创 2020-09-11 21:59:36 · 122 阅读 · 0 评论 -
最小生成树算法--kruskal/Prim
一、kruskal算法 此算法可以称为“加边法”,初始最小生成树边数为0,每迭代一次就选择一条满足条件的最小代价边,加入到最小生成树的边集合里。 把图中的所有边按代价从小到大排序; 把图中的n个顶点看成独立的n棵树组成的森林; 按权值从小到大选择边,所选的边连接的两个顶点vi,vj,vi,vj属于两颗不同的树(一棵树上的两条个顶点相连的话就形成环了),则成为最小生成树的一条边,并将这两颗树合并作为一颗树; 重复(3),直到所有顶点都在一颗树内或者有n-1条边为止。 //****kruskal*****原创 2021-01-20 10:22:32 · 151 阅读 · 0 评论