- 博客(9)
- 收藏
- 关注
原创 反转二叉树 + 检查是否为对称二叉树
函数1:void swap(Tree* &a,Tree* &b) 传入两个节点并交换 此处用到&取引用比较方便 代码如下。可以看出此处是前序反转 适合此解的方法为前序和后序反转 但是中序也是可以做的啦 只不过中序的遍历顺序为左 中 左。函数2:void reverse(Tree* T) 传入根节点即可 代码如下。对于二叉树的反转 我们需要用到递归的思想 类似遍历二叉树的过程。我们需要用到两个函数。
2023-06-10 18:07:57
45
1
原创 二叉树的建立 普通遍历 和 层序遍历
首先 定义一个队列 队列的成员是 树节点 Tree* 当然 如果传入的根节点为空 函数直接返回result即可 此时的 result 是空的 相当于返回了NULL 或者 0,不是空节点 即将根节点 push 进入队列中 开始我们的循环。这里展示的是一级参数的根节点 由于创建二叉树运用到函数creat_Tree的递归 因此我们的输入根节点的value值需要放在main函数中 动用creat_Tree函数之前 即。在二叉树的建立中 我们需要先定义树节点的结构体 再通过函数来初始化二叉树。
2023-06-09 17:25:01
44
1
原创 移 除 元 素
先判断 fast 位置是否为我们想要的数(!可以看到 size 的值是在时刻改变的 其作为循环条件需要在移除元素后及时减 1,第2层循环内为什么是 j <= size-2 呢 原因是 第2层循环的目的是将第 j+1 项的值赋给第 j 项 若循环遍历到 size -1 项即数组的最后一项 不存在第 j + 1 项来赋给 a [ j ] 导致错误.在c++中 数组的定义是同类型的量的集合,不管是一维数组还是n维数组,其在内存上的分布是连续的,所以 对于数组 没有真正意义上的移除元素,而是覆盖元素。
2023-05-20 11:50:28
44
2
原创 二 分 查 找
令 Left = 0 即数组的起始位置,Right = Length - 1 即数组的末位置 Mid = (Left +Right) / 2;如果说 target > a[Mid] 即 target 大于 数组的中间元素值 那么 将 Mid+1 的值赋给 Left。即对半分割了查找范围 Mid 也顺势改为( Left + Right ) / 2;无非是 遍历数组中的所有成员 来找到所要的target 其时间复杂度为O(n)再将 a [Mid] 放入查找范围内 因此将 Mid+1赋给 Left。
2023-05-20 00:43:27
43
1
原创 斐波那契数列的第n项求解
第一种递归 底层逻辑是以二叉树的形式 比如a [5] = a [4] + a [3];当 pos=3 时 pos 前剩下了pos[1] 和 pos[2],分别对应递归后重新赋值的 first 和 second,如果 n > 2,则需要进行递归 每递归一次 pos-1,就类似 循环的 pos- -语句,由于pos > 0。依次类推 已知a [0]=a [1]=1 在递归的最后进行求和 得到斐波那契项。斐波那契数列 即为第一,二项为1,其余的项都为其前两项的和 设第n项为 f (n),
2023-05-19 23:44:47
542
2
原创 递归算法初体验 2023.5.17
递归算法 现阶段我的理解是 定义一个 函数(有参),通过对参数定义域的判断 来实现多次调用 此函数的算法 有点类似之前所学的循环,正因为此,递归算法必须加入递归条件,否则 开辟了无数的函数在数据栈中,数据栈无法继续容纳,就会导致程序的崩溃,在chatgpt中了解到,这种现象叫做 栈溢出。在学习数据结构与算法的过程中,多次听讲师提及递归算法,于是在今天 浅浅地了解了递归算法的原理,并学会了写最基础的demo.cout
2023-05-17 13:33:24
49
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人