数据结构
文章平均质量分 74
数据结构学习
Echo_Aran
️
展开
-
红黑树(思维导图详解版)
部分图片。原创 2023-09-16 19:58:54 · 522 阅读 · 18 评论 -
平衡二叉树(AVL树)C++
让待删除结点左子树当中key值最大的结点,或待删除结点右子树当中值最小的结点代替待删除结点被删除(代码中以后者为例),然后再将待删除结点的key值以及value值都改为代替其被删除的结点的值即可。1.当parent的平衡因子为-2,parent的左孩子的平衡因子为-1时,进行右单旋。2.当parent的平衡因子为-2,parent的左孩子的平衡因子为1时,进行左右双旋。4.当parent的平衡因子为2,parent的右孩子的平衡因子为-1时,进行右左双旋。与二叉搜索树相比,多了更新平衡因子这个步骤。原创 2023-08-27 15:04:09 · 851 阅读 · 11 评论 -
链表实现二叉树
如果子树为空 返回0 不为空返回1。执行逻辑:判断左右子树中高度大的那颗,在此基础上加上自身返回上一级。执行逻辑:统计左右子树叶子的个数 加上自身 返回上一级。将一层的节点全部遍历完了以后再遍历下一层。递归的算法:当根为NULL时,开始返回。执行逻辑:将NULL也push进队列。返回条件:子树为空 或者找到目标值。执行逻辑:即找k-1层子树的个数。返回条件:走到目标层(k==1)执行逻辑:先寻找所有的左子树。是层层返回的 而不是一下返回。出谁,将谁的子树全部带入。返回条件: 为空返回0。原创 2023-04-06 18:52:44 · 1312 阅读 · 0 评论 -
二叉树和堆
建堆是指将一个无序的数组或完全二叉树调整成为一个堆的过程。堆排序是一种基于堆的排序算法。初始时,将待排序的无序数组(排序的是数组)构建为一个堆。构建为大根堆或者小根堆。交换堆顶元素和堆的最后一个节点,然后将堆的大小减一。对交换后的堆进行向下调整,重新满足堆的性质。重复上述步骤,直到堆的大小为1此时得到的是一个有序的堆(即底层数组是有序的,得到了升序或者降序排列的数组)(在堆上的体现就是左右节点之间也有大小关系)升序——建小根堆降序——建大根堆代码实现://堆排序。原创 2023-08-19 20:49:12 · 498 阅读 · 2 评论 -
非递归实现二叉树前、中、后序遍历
递归遍历相当于隐式的维护了一个栈,而非递归遍历则是模拟这个栈的实现。原创 2023-08-19 18:49:30 · 62 阅读 · 0 评论 -
六大排序算法
。原创 2023-04-14 13:46:46 · 344 阅读 · 0 评论 -
六大排序算法的稳定性详解
假定在待排序的记录序列中,存在多个具有相同关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;5.堆排序——不稳定(建堆和交换的时候都可能会乱)4.希尔排序——不稳定(可能会分到不同的组预排)2.选择排序——不稳定(与后面的数字交换)6.快速排序——不稳定(可能会变成中间值)3.插入排序——稳定(相同不插入)1.冒泡排序——稳定(相同不交换)排序稳定,其他的就是。原创 2023-04-14 19:48:23 · 1066 阅读 · 0 评论