- 博客(25)
- 收藏
- 关注
原创 红黑树的插入
并且将爷结点看作是新插入的结点,返回第一个步骤进行处理,由于此时的爷结点是根节点,所以要将爷结点染成黑色。第三步插入 5 :应该插到 结点10的左边,由于插入的不是根节点,所以需要将结点 5 染成红色,但是此时违反了 “不红红” 的原则,所以要开始看 结点5 的 “叔叔” 的脸色,如果它的叔叔是黑色,就开始进行旋转+染色,旋转的规则和平衡二叉树的规则相同,如果是LL或者是RR进行父换爷+染色,如果是LR或者是RL进行儿换爷+染色。如果插入的新节点是根,就把这个插入的结点染成黑色 第一步:先插入20。
2024-12-07 15:06:03
612
原创 平衡二叉树的删除操作
插入新节点后,应该平衡二叉树原有的性质(即 左 < 中 < 右)不变,若插入新节点之后导致不平衡,则需要进行调整平衡。调整之后的结果:如果孙子在RR,将儿子进行左单旋,将儿子的左孩子变为自己的右孩子,同时将儿子变为自己的爹。第三步:找到最小不平衡子树下面,找到个头 最高的儿子,找到个头最高的儿子的儿子(即孙子)但是观察出现了上边的祖先出现了不平衡的情况,解决方法返回第二步继续进行。第四步:根据孙子的位置,调整平衡(LL RR LR RL)若删除结点之后,导致不平衡,则需要调整其平衡。
2024-12-07 09:48:06
906
原创 如何将不平衡二叉树调整成为平衡的样子
第四种情 况:将C结点进行右旋提升到B结点的位置,将C的右节点挂到B的左子树上,然后把该C结点向左上旋转提升到A结点的位置。解决方法就是从插入节点往回找到第一个不平衡结点,调整以该节点为根的子树。第三种情况: 先将结点C左旋提升到B结点的位置,将C的左孩子连到B的右边,然后再把C结点向右上旋提升到A结点的位置。第二种情况: 进行左旋,将B结点变为新的根节点,将A转换为B的左孩子,将B的左孩子挂在A的右边。第一种情况:进行右旋,将B变为新的根节点,将A变为B的右子树,将B的右孩子挂在A的左边。
2024-12-06 21:16:03
743
原创 二叉排序树的定义以及相关操作
3 要删除的结点既有左子树,也有右子树的情况时,让被删除结点的 中序 遍历的后继结点替换被删除结点的位置。其中序遍历的后续节点的右子树中最左下结点(该节点一定没有左子树,让被替换结点的右子树直接替代它原来的位置就行)二叉排序树的递归实现查找值为Key的结点 最坏空间复杂度为O(H)H 取决与二叉排序树的高度。1 要删除的结点是叶节点的情况,则直接进行删除,并不会破坏二叉排序树的性质。或者使用被删除结点的直接前驱替代被删除的结点(即左子树中最右下的结点)二叉排序树的插入(递归方式实现)
2024-12-06 11:27:19
513
原创 队列的链式存储方式以及其基本操作
队列就是操作功能受限的单链表,因为队列只能对单链表的队头与队尾进行操作。链式存储实现队列可以分为带头结点与不带头结点的版本。初始化带头结点的队列。
2024-11-30 11:42:56
635
原创 队列的顺序实现,循环队列的相关计算
方案三:判断队空或者队满 ( 设置一个变量 tag ),当tag变量为0时,表示最近进行的是删除操作,当tag变量为1时,表示最近进行的是插入操作。将第 n-1 个位置的设置为要牺牲的存储单元,于是当队尾指针位于队头指针的后两个位置时,意味着队满,当队尾指针位于队头指针的后一个位置时,说明已经队空。以上各种情况都是基于队头指针指向队头元素,队尾指针指向队尾元素的下一个位置完成的。队列也是一种线性表,一种操作受限的线性表,只能从对头删除元素,只能从队尾插入元素。增加一个size变量或者是一个tag变量。
2024-11-30 10:13:46
502
原创 字符串的朴素模式匹配算法
朴素模式匹配算法:暴力解决问题 ,将主串中所有长度为m的子串依次与模式串对比,直到找到一个完全匹配的子串或者所有的子串都不匹配为止。如果 j > T.length,则当前子串匹配成功,返回当前子串第一个字符的位置----- i - T.length。字符串的模式匹配:在主串中找到与模式串相同的子串,并返回其所在位置。主串长度为N ,模式串长度为M,则最多对比 N-M+1 个子串。字符串的模式匹配:朴素模式匹配,KMP算法。子串:主串的一部分,一定存在。模式串:不一定能在主串中找到。
2024-11-28 14:38:37
316
原创 串的定义和基本操作
串的定义:即字符串(string)是由零个或多个字符组成的有限序列。字符在主串中的位置:字符在串中的序号(从一开始的)串的比较操作:26个字母中,越靠前的值越小,越靠后的值越大。子串:串中任意个连续的字符组成的子序列(可以是空串)子串在主串中的位置:子串第一个字符在主串中的位置。串也是一种特殊的线性表,数据元素之间呈现线性关系。空串:没有字符的串(全是空格的串不算)空格串:全是空格的串。
2024-11-28 11:42:50
379
原创 栈在表达式求值时的应用下
依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式。如果碰到 “( ”或栈空则停止。之后把当前运算符入栈。操作数直接入赘(缀),运算符先入栈,然后按优先级入赘(缀),直到见到左括号,左括号直接入栈,右括号弹出栈中元素,直到见到左括号。遇到“ ) ”即右括号,则依次弹出栈内运算符并加入后缀表达式,直到弹出 “( ”为止。注意:“(” 左括号不加入后缀表达式。用栈实现中缀表达式的计算(步骤:先将中缀转为后缀,然后进行后缀表达式求值)直接加入后缀表达式。遇到 “( ”即左括号 ,直接入栈。
2024-11-27 09:44:04
274
原创 栈在表达式求值中的应用
方法:1,从左向右扫描元素 2,如果扫描到操作数则压入栈 3,如果扫描到运算符,就弹出两个栈顶元素,并执行相应运算,结果压回栈顶,继续扫描。扫描下一个元素 2,如果扫描到操作数,就压入栈 3,如果扫描到运算符,就弹出两个栈顶元素执行相应的运算,运算结果压回栈顶。一 ,三种算术表达式:中缀表达式,后缀表达式(逆波兰表达式),前缀表达式(波兰表达式)。三 ,前缀表达式相关考点:中缀表达式转为前缀表达式,前缀表达式求值。算术表达式组成:操作数,运算符,界限符(就是括号)前缀表达式的运算:1,
2024-11-27 08:02:54
308
原创 数据结构第二章双链表的相关操作
带头结点的循环双链表的实现以及一系列操作。不带头结点的双链表的实现以及一系列操作。不带头结点的双链表的实现以及一系列操作。带头结点的双链表的实现以及一系列操作。
2024-11-25 19:55:31
388
原创 数据结构第二章单链表的相关操作
不带头结点的循环单链表的实现以及一系列操作。带头结点的循环单链表的实现以及一系列操作。不带头结点的单链表的实现以及一系列操作。带头结点的单链表的实现以及一系列操作。
2024-11-25 19:49:03
503
原创 如何快速给Clion配置C++环境
如果出现类似如下的代码片段说明你已经把环境配置成功了。文件的路径放在新建的框内,一路点击。验证环境是否配置成功,打开。将mingw64中的。
2024-11-25 19:29:52
796
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅