- 博客(8)
- 收藏
- 关注
原创 【数据结构】二叉树
二叉树是最常用的树形结构,特别适合编码,常常将一般的树转换为二叉树来处理。二叉树的每个节点最多有两个子节点,分别称为左孩子、右孩子,以它们为根的子树称为左子树、右子树。二叉树的每层节点数以2的倍数递增,所以二叉树的第i层最多有2i−1个节点。如果每层的节点数都是满的,称它为满二叉树。一个n层的满二叉树,一共有2”一1个节点。如果满二叉树只在最后一层有缺失,并且缺失的编号都在最后,则称为完全二叉树。
2025-04-18 20:39:08
1012
原创 Leetcode链表题总结
leetcode提供的链表一般没有头结点,某些题目需要注意添加头结点,这样一来,我们就不需要对链表的第一个结点进行特殊的操作与判断了。
2025-04-18 11:36:28
1129
原创 【算法】搜索dfs
深度优先搜索(Depth-First Search,简称DFS)是一种经典的图遍历和搜索算法,它以"深度"为优先方向进行探索,广泛应用于各类问题的解决中。DFS算法使用栈(stack)作为其核心数据结构,可以是显式的栈结构,也可以通过递归调用隐式地利用系统栈。它的空间复杂度为O(h),其中h是搜索树的高度。
2025-04-17 11:43:02
314
原创 【算法】动态规划树形DP
在树这种数据结构上做DP很常见:给出一棵树,要求以最少代价(或最大收益)完成给定的操作。并且在树上做DP显得非常自然,因为树本身有“子结构”性质(树和子树)。基于树的解题步骤一般是先把树转换为有根树(如果是几棵互不连通的树,就加一个虚拟根,它连接所有孤立的树),然后在树上做DFS,递归到最底层的叶子节点,再一层层返回信息更新至根节点。
2025-04-11 20:41:43
962
原创 【数据结构】并查集详解
由于每棵树的根结点代表该集合,当合并两个集合时,比如将a集合与b集合合并。为了保证a集合中的每个元素的根结点不重不漏地均变为b集合的根结点,只需将a集合的根结点root_a的父节点pre[root_a]更新为集合b的根结点。我们可以发现由于合并操作和查询操作只会用到集合的根结点,我们不需要维护树中每个元素的父结点,所以我们可以将每棵树的非根结点全部加到根结点的下方,也就是所谓的路径合并操作。如何方便的维护每个元素的根结点同时进行不同子集的合并操作呢?当查询某个元素的根结点时进行路径合并操作即可。
2025-04-08 14:48:14
471
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人