
算法与数据结构
文章平均质量分 73
CHJH_MingYI
我只是一个蒟蒻,所写的博客也只是为了记录下遇到的问题。如果可以对你有所帮助,不胜荣幸。
展开
-
哈夫曼树与哈夫曼编码
哈夫曼树与哈夫曼编码哈夫曼树如何构建哈夫曼树哈夫曼编码完整代码哈夫曼树哈夫曼树是一类带权路径长度最短的树,通过对哈夫曼树的构建,可以实现数据的编码最短且不同数据编码之间互不为前后缀的效果。如何构建哈夫曼树根据给定的nnn个权值{v1,v2,…,vn}\{v_1,v_2,\dots,v_n \}{v1,v2,…,vn}构造nnn棵只有根节点的二叉树,并令其权值为wi(i=1,2,…,n)w_i (i =1,2,\dots ,n)wi(i=1,2,…,n)。在这些二叉树所组成的森林中选取两原创 2021-02-01 16:32:06 · 273 阅读 · 0 评论 -
二叉树的前序、中序、后序遍历(非递归)
如需递归写法,可以参考:https://blog.youkuaiyun.com/weixin_45413689/article/details/108270678结构体定义:struct node{ char data; node *lchild; node *rchild;};//构建二叉树使用二叉链表非递归写法使用非递归的写法,必然需要其他辅助空间来实现,对于递归改写成非递归的一个做法而言,我们首选的辅助空间就是栈结构。而我们要做的,就是使用栈去模拟递归的操作(只能操作栈顶)。如果想使用栈完原创 2020-12-24 21:06:15 · 296 阅读 · 1 评论 -
求二叉树深度算法(深度优先、广度优先)
求二叉树深度的算法二叉树深度方法一:深度优先的遍历方式方法二:广度优先的遍历方式总结二叉树深度注:本文中二叉树通过二叉链表构建。节点类型定义如下:struct node{ char data; node *lchild; node *rchild;};方法一:深度优先的遍历方式思路一(自上向下):每下一层,就和当前暂存的最大的深度作比较并取最大值对二叉树做遍历操作,最简单可以用递归的方式实现。这就需要我们对递归进行下一层的时候,需要记录下一层的深度等于当前深度+1。通过递归实现后原创 2020-12-11 23:25:41 · 7502 阅读 · 0 评论 -
并查集
并查集什么是并查集并查集的结构初始化合并查询再谈并查集什么是并查集并查集是一种十分简单的数据结构,它可以用来描述元素的分组情况。并查集可以十分高效地进行“并”和“查”两个操作,但无法进行分割操作。其中:并:合并a,b两个元素所在的组;查:查询a,b两个元素是否属于同一组;并查集的结构并查集是一种树形结构(并非二叉树),使用并查集后,多数情况下会有不止一棵树,即一个森林。初始化在初始状态时,所有元素均和自己且只和自己是一组,这是毋庸置疑的。并查集作为一个树形结构,我们需要有一个根节点原创 2020-09-08 19:45:01 · 438 阅读 · 0 评论 -
二叉树的遍历——先序遍历、中序遍历、后序遍历
遍历二叉树(本文的二叉树均使用指针方式构建)先序遍历操作定义:若二叉树为空,则空操作; 否则:访问根节点;先序遍历左子树;先序遍历右子树;代码:void preOrderTraveral(treeNode* node){ if (node == NULL){ return; } cout << node->data; preOrderTraveral(node->lchild); preOrderTrav原创 2020-08-27 23:34:17 · 456 阅读 · 0 评论 -
快速幂
快速幂问题引入快速幂为什么要用快速幂?什么是快速幂?快速幂的实现再谈快速幂还能再快吗?后记问题引入在对循环的学习是,老师们通常会要求学生编写一个程序用于求取一个数的n次幂。实现也很简单,不过就一遍遍地乘底数以此来得到结果嘛。 long long ans = 1; for (long long i = 0;i < power; i++){ ans = ans * base % mod; }这里为了保证数据不会溢出,本文章的求幂过程将在模意义下进行。原创 2020-08-23 23:51:24 · 189 阅读 · 0 评论 -
快速排序
先来观察一下这个有序序列:我们可以看出:该序列整体有序该序列由前五个元素组成的序列有序该序列由后五个元素组成的序列有序该序列右侧五个元素均比左侧五个元素大……每个元素对于自身有序换句话说,一个有序序列是由许多个有序的子序列按序组合而成的。是不是感觉上面的那句话有点绕,...原创 2020-08-03 09:39:41 · 180 阅读 · 0 评论 -
通过先序遍历和中序遍历建立二叉树
在对二叉树进行操作之前,建树是必须要做的。假设现在有某二叉树的先序遍历和中序遍历,我们应该如何建树?基本思路:分别求得根节点的左子树和右子树的先序遍历序列与中序遍历序列分别以左子树和右子树为新树进行第一步操作直至没有子树为止那么我们这么实现呢?根据我们对二叉树遍历的学习,可以知道:先序遍历序列中的第一个节点为根节点一个节点的左右子节点分别位于中序遍历序列中该节点的两侧举个例子:对于图中二叉树,其先序遍历序列与中序遍历序列如右侧所示,每个序列共6个字母(此二叉树共有6个节点)。原创 2020-08-01 16:29:28 · 7227 阅读 · 1 评论