自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 leetcode.131/93回溯算法—分割

startindex为分割开始的下标(left)i为分割结束的下标 (right)这俩中间夹的,就是目前分割出来的字符串,拿去判断是否为回文如果是回文,更新startindex为i+1,递归继续分割后面的剩余部分,如果不是回文,continue,考查for循环的下一个i+1。

2025-04-17 20:52:17 203

原创 leetcode.77/216/17/39/40回溯算法—组合问题

参考自“代码随想录”

2025-04-17 19:05:42 821

原创 leetcode236/235.二叉树最近公共祖先总结

所以对于这个236题,我第一反应直观的想法是求到根节点到p、q两个节点的path,然后逆向去求两条path的第一个相交节点(或是正向求得当两个节点的值不同的时候,那么前一个节点就是最近公共祖先)2:如果一个节点node的左子树有p or q,而右子树没有p or q,那公共祖先要么在node之上,要么就是身处node的左子树的p or q本身。1:如果一个节点node的左子树有p or q,右子树也有p or q,那node就是他俩的最近公共祖先。利用二叉搜索树的性质进行遍历就行,很简单没什么讲的。

2025-04-15 20:20:06 178

原创 leetcode98/530/501/538.二叉搜索树属性题型总结

其实你看见二叉搜索树,把它和中序遍历联系起来就好了,二叉搜索树结构成立 == 中序遍历有序,这两者之间有等价关系,为什么?因为l mid r的中序遍历顺序与二叉搜索树 左子树 < 中节点 < 右子树的结构性质吻合,这两者等价性的必要与充分我就不证明了,接下来放题目总结以及代码技巧。双指针遍历思想:定义一个pre代表前节点,不断更新pre。

2025-04-15 19:05:22 754

原创 leetcode.617合并二叉树

问题来了,那我们要在递归过程中记录父节点吗?并不可以这样 node1(左) = node2(右) 这样简单的节点赋值。,改变root指向node1的指针,例如node1是父节点的左孩子,那么。4、左节点存在,右节点存在,返回val叠加后的左节点。1、左节点None,右节点None,返回None。我们使用了返回值来达到修改结构的目的(向父节点返回子树根节点)2、左节点存在,右节点None,返回左节点。3、左节点None,右节点存在,返回右节点。,这样才算改变结构,把右子树挪过去了。

2025-04-14 21:47:54 122

原创 leetcode654.最大二叉树

这个没啥好讲的,参考主页前文leetcode105/106构造二叉树。

2025-04-14 21:26:56 69

原创 leetcode105+106.从中序和后序、中序和前序遍历序列构造二叉树

中序(l mid r),后序(l r mid),那么后序序列的最后一个=根节点,且中序序列中,在根节点数值左边的为左子树,根节点右边的为右子树。根据这个规律不断分割给出的序列就行。可以想一下,如果我只有后序+前序,我只能确定后序的last为根节点,前序的first为根节点,我找不到左右子树。因为只有中序才能把左子树和右子树分开,才能以此去分割序列。为啥没有后序+前序这个组合,非得有个中序?3python如果切片越界会返回空列表【】2理解递归函数的返回值为新建树的根节点。1注意分割的边界处理。

2025-04-14 16:36:19 296

原创 leetcode226.翻转二叉树

只需要注意,中序遍历不行,左中右的遍历顺序的话,先翻转了左子树,然后处理中节点的时候,把左右子树交换了,然后翻转右子树(但此时的右子树就是刚刚被翻转了的左子树),出错。所以前序,后序都可以。

2025-04-14 16:10:39 80

原创 leetcode112+leetcode113.路径总和

这个其实不怎么区分遍历顺序,因为没有对中节点的处理逻辑,只有提前结束的终止条件。

2025-04-14 15:54:41 95

原创 leetcode513.找左下角的值

直观思路,层序遍历,每层的第一个节点就是最左,取最后一层的第一个就行。

2025-04-14 15:34:49 89

原创 leetcode404.左叶子之和

加一个is_left判定,很好理解的~~

2025-04-14 15:14:38 73

原创 leetcode257.二叉树的所有路径

参考自“代码随想录”这道题在leetcode是简单题,但是有很多递归的易错点需要理解,还是需要花一些功夫的。我用的是python来解决这些算法题,所以这道题的递归方法要结合python的语言特性,读者用c++或java的可以结合自己的语言特性进行理解题目思路很好想到,我从根节点开始遍历,每遍历到一个节点,就把它加入路径(先处理了当前遍历到的节点),如果它是叶子节点,就找到其中一条路径,存到结果里,如果它有孩子,继续向孩子遍历,直到遍历完整棵树。那么应该是什么遍历顺序——显然中左右,前序。

2025-04-14 14:57:52 218

原创 leetcode110.平衡二叉树

判断是否为平衡二叉树,其实就是给计算数的高度这个函数加一个判断逻辑,如果当前节点的左子树高度与右子树高度之差大于1,则返回false,否则正常返回高度。我们这里用-1来替代false。

2025-04-12 22:32:22 59

原创 leetcode222.完全二叉树节点个数

但这没有利用完全二叉树的性质,这里要区分满二叉树和完全二叉树(自己查定义)。从根节点往左走,得到最左深度maxDepthL,同理从根节点往右走,得到最右深度maxDepthR,如果maxDepthL == maxDepthR,那么就是一课满二叉树,直接计算返回,不然继续向下递归,总能得到满二叉树,这样可以不用遍历所有节点。首先最直观的想法,对于一个普通二叉树,我们想知道节点个数,递归得到:左子树节点数目 + 右子树节点数目 + 1(当前节点),返回给上层函数(告诉他爹,我这有这么多节点~)

2025-04-12 21:56:53 170

原创 leetcode.111二叉树最小深度

易错点,如果子树高度为0(即没有节点),这条路径是作废的,只能返回另一个子树高度。这个和最大深度没啥大区别,还是后序,选子树中高度的min就好了,但注意一个。

2025-04-12 21:34:19 91

原创 leetcode104.二叉树的最大深度

那么采用什么遍历方式呢?我想知道一棵树多高,从顶上出发的话,我得到最底下才能测量出来多高吧,那么我站在目前节点来看,我得去看看左子树多高,再看看右子树多高,然后返回他俩其中更高的那个高度 + 1(当前节点还要高一层)(不真的高到哪里去了说实话)对吧。当然也可以层序遍历,记录一下有多少层不就是多高吗。高度:从当前节点到最远叶子节点路径经过的节点数。可以认为,二叉树的最大深度 = 根节点高度。深度:从根节点到当前节点路径经过的节点数。所以是,后序,先处理左右。

2025-04-12 21:20:16 143

原创 leetcode101.对称二叉树

确定一颗二叉树是否轴对称,我们从根的左右节点nodel和nodr开始,如果这俩不相等,那肯定false了,如果相等,这颗树就轴对称了吗?显然不是啊,我们还要考查这俩的孩子们啊。这不就套娃了,我得递归到最底层才能一层层向上返True,但只要我递归到某一层不满足这个相等条件了,就直接向上返回false了。那如果这组满足了,这棵树就轴对称了吗?显然也不是啊,我还得看这四个节点(或不到四个,可能有空节点)的孩子们啊。

2025-04-12 21:05:02 143

原创 二叉树的各种遍历(一切的起点)

参考自《代码随想录》二叉树的遍历其实就是你解决二叉树一切问题的起点和根本,在此做一个总结,给出递归、迭代(用栈、队列模拟)的大一统写法。

2025-04-12 20:27:34 86

原创 leetcode538.把二叉搜索树转换为累加树

那对于我们的二叉搜素数,我们中序遍历(L MID R)是递增,我们如何倒序呢?,右中左(R MID L)就完了,代码如下。二叉搜索树的特性是什么?中序遍历为递增数组啊。如果这题改成把数组改为累加数组,是不是只需要从右向左遍历数组,每一个位置的值 = 之前所有遍历过的数累加 + 自身数值。(题目要求为>=而不是大于,这点可以灵活变通)

2025-04-12 18:27:57 129

原创 leetcode108.将有序数组转换为平衡二叉搜索树

参考自“代码随想录”

2025-04-12 17:42:03 128

原创 leetcode669修剪二叉搜索树

1.当我node.val小于题目左边界时,node左子树全剪切掉,只需要考虑右子树,因为右子树所有节点都比node大,,那么node节点就被自然地删除了。这个原理其实与链表删除节点是几乎一样的,都是修改指针跳过删除节点而已。我们将正在处理删除的node的孩子节点,返回给上层函数(对应node的父节点)3.与二叉搜索树的插入和删除节点类似,我们仍采用返回值的方式来删除节点,2.递归函数的返回值问题,这里的递归函数返回值均返回的是。则右子树有部分节点是符合区间要求的。参考自“代码随想录”

2025-04-11 17:58:46 392

原创 leetcode450、701搜索二叉树插入与删除节点总结

参考自《代码随想录》二叉树章节,其中有一些与之不同的思路。

2025-04-11 15:49:56 366

原创 哈工大计算机系统期末大论文

Hello程序是现阶段python、c、java等多数开发平带的首个入门级程序,其中又以c语言的hello.c最为经典。虽如今hello程序多作为入门程序存在,很少有人研究,但其作为首个完成P2P、020的程序,仍有较大研究价值。P2PP2P(From Program to Process)表示在Linux系统下一类从程序变成进程的过程。在此过程中,属于文本文件的hello.c需经过cpp的预处理、ccl的编译、as的汇编、ld的链接,才可成为可执行的二进制文件。

2023-05-22 17:58:58 238 1

哈工大计算机系统期末论文

精心烹制,图文并茂

2023-05-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除