自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 06.对称二叉树

题目:  给定一个二叉树,检查它是否是镜像对称的。示例:二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3题解1:思路:    ...

2021-05-22 00:04:31 84

原创 05.树的最大深度

题目:  给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。题解1(自底向上的方法):思路:  类似与后序遍历,某个树的高等于max(子树)+1。代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * Tre

2021-05-21 12:59:45 144

原创 04.树的层序遍历

题目:  给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7输出:[ [3], [9,20], [15,7]]思路:  利用队列先进先出的特点,对树一层一层地遍历,每一次处理完后,对不为空的儿子节点入队,并将自己出队。/** * Definition for a binary tree nod

2021-05-21 10:50:37 142

原创 03.树的后序遍历

递归:思路:按照前后中的顺序即可,递归实现起来比较简单。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(n

2021-05-20 11:41:44 258

原创 02.二叉树的中序遍历

递归:思路:按照左中右的顺序,访问二叉树即可。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullpt

2021-05-20 11:20:22 46

原创 01.树的先序遍历

递归代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr)

2021-05-20 00:34:09 146

原创 009.旋转链表

题目:  给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。输入:head = [1,2,3,4,5], k = 2输出:[4,5,1,2,3]输入:head = [0,1,2], k = 4输出:[2,0,1]思路:  通过数学观察发现,旋转链表实际上就是把倒数第k%n个结点及其以后的结点提前,然后在其末尾连上前面的结点。但是要注意如果k%n等于0则可以预先处理(即无移动),否则还要修改相应的代码。代码:/** * Definition for s

2021-05-19 23:40:05 38

原创 008.链表两数相加

题目:  给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。例如:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.思路:  这道题思路还是比较简单的,但是要注意进位和两个链表之间长度之间的差异。由于本人对链表的一些操作不太熟悉,导致代码好像很冗长(哭

2021-05-19 23:34:37 38

原创 007.合并两个有序链表

题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。题解1:  思路:设置一个哑结点用于链接新的链表。对于两个升序链表来说,分别利用两个指针来比较当前结点的值,将较小的值链接到新链表中(注意相等时取哪个在if语句中自行选择)。最后如果有哪个链表到尾了,则另外一个链表直接接上去即可。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; *

2021-05-19 23:27:21 57

原创 006.回文链表

题目:请判断一个链表是否为回文链表。题解1(栈):  思路:看到这种之类的,首先就想到栈。这种方法思路很简单,就是把前面一段的链表放到栈中,然后将运动指针p指向另一段开头,然后两端不断比较即可。唯一要注意的点是链表长度奇偶时有不同处理。  但是,这种解法效率比较低。  补充:直接将链表全部压栈然后与原链表对比也可以,不用一定要两段进行比较。  Tip:stack.pop()返回的是void,并不能返回元素,要用stack.top()来返回头元素。/** * Definition for sin

2021-04-29 10:48:17 45

原创 005.奇偶链表

题目:给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。题解1:  思路:总体的思路就是把这个链表分为奇数链表和偶数链表,然后再把这两个链表合起来(奇数链表要放在偶数链表前面)。  但是由于该题目中用到的指针比较多,终止条件的判断以及链表的连接都要注意。在做题的时候主要碰到的还是一个老问题,就是使用

2021-04-28 20:40:55 48

原创 004.移除链表元素

题目:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。题解1(双指针):  思路:首先,为了便于删除头结点,因此创建一个哑结点(leetcode称为哨兵结点)。然后利用前后指针(距离为1),遍历链表。如果curr指针指向的结点的值为给定值,此时prev正好指向前一个结点,curr为删除的结点。/** * Definition for singly-linked list. * struct ListNode

2021-04-28 19:35:32 37

原创 003.反转链表

题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。题解1(迭代):  思路:如1→2→3→∅,我们想要把它改成 ∅←1←2←3。则可以利用两个指针,一个保存前一个节点,一个保存后一个节点,然后将其倒序。但是我们要注意每次倒序之前,要利用一个指针变量保存原来的下一个结点,否则后续的链表将找不到。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode

2021-04-28 15:47:55 79

原创 C++中定义的循环变量会创建几次

在CodeBlocks中进行测试:可以看出:地址都是相同的,创建一次。

2021-04-28 13:11:14 168

原创 002.删除链表的倒数第N个节点

题目:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。1.题解1(双指针):  思路:题目给出的链表是没有哑结点的,为了不单独讨论头结点的删除。我们可以手动new一个哑结点。  另外,我们可以设置两个指针p1和p2。两个指针都是从哑结点开始,p2先走n-1步,此时两个结点的距离就是n-1,有n个结点。然后,再让p1和p2两个指针一起走,直到p2到达末尾,此时p1所指向的结点就是倒数第n个结点了。(因为p1和p2的距离正好隔着n-1)。  Tip:注意delete相关结点,及时清理内

2021-04-28 12:25:17 113

原创 VS2019中添加万能头文件

  在Devcpp和CodeBlocks中都有万能头文件<bits/stdc++.h>,但是在VS中如果要使用,需要手动添加。以VS2019为例:1.在安装路径下,依次进入:VC --> Tools --> MSVC --> 14.28.29333(此文件夹名每个人会有不同) --> include2.在 include 文件夹下新建一个 bits 文件夹,在此文件夹下添加 stdc++.h 头文件3.stdc++.h的内容如下,可以自行创建头文件:.

2021-04-28 10:23:48 2944

原创 001.双指针的运用

1)链表中的双指针2)环形链表

2021-04-19 11:32:18 63

空空如也

空空如也

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

TA关注的人

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