自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数值的整数次方(快速幂实现)

题目实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。示例 1:输入:x = 2.00000, n = 10输出:1024.00000示例 2:输入:x = 2.00000, n = -2输出:0.25000解释:2-2 = 1/22 = 1/4 = 0.25提示:-100.0 < x < 100.0-231 <= n <= 231-1-104 <= xn <= 104思路1、将指

2021-08-13 11:19:11 997

原创 打印从1到最大的n位数(DFS+回溯实现)

题目输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]说明:1、用返回一个整数列表来代替打印;2、n 为正整数。思路1、数字的每一位都可以由0 ~ 9的数字组成;(最高位不能为0)2、所以我们可以使用深度优先搜索算法(DFS)来实现数字的构造;3、深度优先搜索(DFS):可理解为朝着某个方向一直递归下去,直到最后一个节点;4、回溯是保

2021-08-10 16:23:29 320

原创 剪绳子(动态规划实现)

题目给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 :输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1提示:2 <= n <= 58思路1、确定状态方程:dp[n],表示将长度为n的绳子

2021-08-07 11:36:55 407

原创 机器人的运动范围(BFS + 剪枝实现)

题目地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例 1:输入:m = 2, n = 3, k = 1输出:3思路1、广度优先搜索(BF

2021-08-06 09:28:01 268

原创 旋转数组的最小数字(二分法实现)

题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 :输入:[3,4,5,1,2]输出:1思路1、因为数组是一个递增数组的一个旋转,则一定存在:左边的所有数字 >= 最小值 <= 右边的所有数字2、对于有序的的数组一般可以使用二分法来寻找目标值。当中间的数字大于最右的数字时,最小值一定在中间指针的右

2021-08-04 17:38:39 916

原创 矩阵中的路径(dfs回溯实现 + 剪枝)

题目给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。示例 :输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”

2021-08-02 17:12:02 331

原创 青蛙跳台阶问题(动态规划问题)

题目一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。注意:答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 0输出:1示例 2:输入:n = 2输出:2提示:0 <= n <= 100思路1、设青蛙跳上n级台阶的跳法为:f(n);2、因为青蛙只能跳1级台阶或者2级台阶,则跳上下一级台阶时,青蛙只能从倒数第一层跳一层到这个台阶,或者从倒数第二层跳两层

2021-07-31 13:02:30 711

原创 斐波那契数列(动态规划实现)

题目写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。注意:答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 :输入:n = 5输出:5提示:0 <= n <=

2021-07-31 12:29:20 1319

原创 重建二叉树(递归实现)

题目输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。注意:假设输入的前序遍历和中序遍历的结果中都不含重复的数字。示例 1:Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]限制:0 <= 节点个数 <= 5000思路1、前序遍历顺序为:根节点 --> 左节点–> 右节点,则为【根节点,左子树, 右子树】;2、中序遍历顺

2021-07-30 17:14:33 217

原创 从尾到头打印链表(递归实现)

题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000思路因为递归可以实现逆向遍历的效果,所以可以使用递归来逐个返回节点。实现/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * L

2021-07-29 16:16:38 264

原创 替换空格(StringBuilder实现)

题目请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000思路将字符串中的每个空格替换成“%20”,即将1个字符替换成3个字符,不便于在原字符串上进行替换,所以使用StringBuilder保存替换后的结果。实现class Solution { public String replaceSpace(String s) {

2021-07-29 15:14:03 319

原创 二维数组中的查找(线性查找实现)

题目在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:测试:1、给定 target = 5,返回 true;2、给定 target = 20,返回 false。限制:1、0 <= n <= 1000;2、0 <= m <= 1000。思路1、矩阵从上往下和从左往右都是有序的,如果我们从左上

2021-07-28 14:24:45 207

原创 数组中重复的数字(原地置换实现)

题目找出数组中重复的数字:在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000思路1、因为数组长度为n,所有数字都在0~n-1的范围内;当使用0~n-1作为索引时(下标为 i 的位置保存数字 i,则nums[index] == inde

2021-07-27 16:20:12 289

原创 用两个栈实现队列

题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]提示:1.1 <= values <= 10000;2. 最多会对 appe

2021-07-27 14:44:49 694

原创 正则表达式匹配(动态规划实现)

题目给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例 :输入:s = “aa” p = “a”输出:false解释:“a” 无法匹配 “aa” 整个字符串。提示:0 <= s.length <= 200 <= p.length <= 30s 可能为空,且只包含从 a-z 的小写字母。

2021-01-14 09:20:50 607 2

原创 寻找两个正序数组的中位数(二分法 - 第k小数实现)

题目给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3)

2021-01-07 17:59:42 362

原创 最长回文子串(动态规划实现)

题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 :输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。注意点1、确定动态规划方程:dp[j][k] - 表示以下标为 j 为开始,以下标为 k 为结束的字符串是否为回文串;2、确定状态转移方程:当字符串长度为0时,返回空字符串“”;当字符串长度为1时,都是回文串;当字符串长度为2时,当两个字符相同时为回文串;当字符串长度大于2时,当头尾两字符相等,且dp[j

2020-12-23 17:38:49 1357 1

原创 寻找旋转排序数组中的最小值(二分法简单实现)

题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] 。请找出其中最小的元素。示例 :输入:nums = [3,4,5,1,2]输出:1提示:1、1 <= nums.length <= 5000;2、-5000 <= nums[i] <= 5000;3、nums 中的所有整数都是 唯一 的;4、nums 原来是一个升序排序的数组,但在预先未知的某个点上进行了旋转。注意点1、

2020-12-22 17:56:38 188

原创 乘积最大子数组(优化动态规划空间实现)

题目给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 :输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。注意点1、动态规划思想类似数学中的数学归纳法;2、确定状态方程:max[n]:表示以n为下标为结尾的连续数组的最大乘积;(此处为了优化空间,只是用 max(当前元素)和 preMax(前一元素)记录以该元素结尾的最大乘积)min[n]:表示以n为下标为结尾的连续数组的最小

2020-12-18 11:09:26 341

原创 翻转字符串里的单词(简单实现)

题目给定一个字符串,逐个翻转字符串中的每个单词。说明:1、无空格字符构成一个 单词 ;2、输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括;3、如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。示例 :输入:" hello world! "输出:“world! hello”解释:输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。提示:1、1 <= s.length <= 104;2、s 包含英文大小写字母、数字和空

2020-12-17 16:39:07 473

原创 逆波兰表达式求值(栈实现)

题目根据 逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:1、整数除法只保留整数部分。2、给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 :输入: [“2”, “1”, “+”, “3”, “*”]输出: 9解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9逆波兰表达式:1、逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。

2020-12-16 15:55:58 927

原创 排序链表(归并排序递归实现)

题目给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。示例 :输入:head = [4,2,1,3]输出:[1,2,3,4]提示:1、链表中节点的数目在范围 [0, 5 * 104] 内;2、-105 <= Node.val <= 105。注意点1、归并排序其实就是使用分治(将问题分(divide)成一些小的问题然后递归求解)的思想来实现排序的,其主要的操作就是将两个已经有序的序列进行合并成一个有序的链表;2、使用分治思想,所以需要寻找中间节点,链表

2020-12-11 17:00:49 1001

原创 对链表进行插入排序(从前往后遍历简单实现)

题目对链表进行插入排序。插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。示例 :输入: 4->2->1->3输出: 1-&

2020-12-10 09:13:34 782

原创 LRU缓存机制(LInkedHashMap实现)

题目运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) :以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) :如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) :如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在写入新数

2020-12-08 17:37:19 380 1

原创 二叉树的后序遍历(前序遍历逆序迭代实现)

题目给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3]输出: [3,2,1]进阶: 递归算法很简单,你可以通过迭代算法完成吗?注意点参考:二叉树的前序遍历(迭代实现)1、二叉树后序遍历顺序为:左节点-> 右节点 -> 根节点;2、二叉树前序遍历顺序为:根节点-> 左节点 -> 右节点;3、所以我们可以采用前序遍历的方式,逆序输出后序遍历;4、步骤:1、根节点入栈;2、栈顶节点出栈,并记录到结果中(注意:使用头插法);3、判断出

2020-12-04 16:23:36 1843

原创 二叉树的前序遍历(迭代实现)

题目给你二叉树的根节点 root ,返回它节点值的前序遍历。示例 :输入:root = [1,null,2,3]输出:[1,2,3]提示:1、树中节点数目在范围 [0, 100] 内;2、-100 <= Node.val <= 100。进阶:递归算法很简单,你可以通过迭代算法完成吗?注意点1、二叉树前序遍历的顺序为:根节点-> 左节点 -> 右节点(根节点-> 左子树 -> 右子树)2、递归过程其实就是使用系统栈来实现的,所以迭代过程中,我们可以使

2020-12-04 12:04:04 2385

原创 重排链表(双向队列实现)

题目给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…注意:你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 :给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.注意点实现/** * Definition for singly-linked list. * public class ListNode { * in

2020-12-03 14:36:06 252

原创 环形链表Ⅱ(快慢双指针实现)

题目给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?示例 :输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:链表中有一个环,其尾部连接

2020-11-17 15:53:35 176

原创 单词拆分(动态规划)

题目给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:1、拆分时可以重复使用字典中的单词。2、你可以假设字典中没有重复的单词。示例 :输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。注意点1、动态方程dp[n] :表示前n个字符串是否可以用字典中的单词表示

2020-11-16 17:42:40 1045

原创 复制带随机指针的链表(新老节点交替)

题目给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:val:一个表示 Node.val 的整数。random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。示例 :输入:head = [[3,null],[3,0],[3,null]]输出:[[

2020-11-12 16:39:45 153 4

原创 加油站(贪心思想)

题目在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:1、如果题目有解,该答案即为唯一答案;2、输入数组均为非空数组,且长度相同;3、输入数组中的元素均为非负数。示例 1:输入:gas = [1,2,3,4,5]cost = [3,4,5,1,

2020-11-06 17:33:19 114

原创 克隆图(BFS实现)

题目给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。(即使用复制题目中给出得图(深拷贝))class Node {public int val;public List neighbors;}测试用例格式:1、简单起见,每个节点的值都和它的索引相同。例如,第一个节点值为 1(val = 1),第二个节点值为 2(val = 2),以此类推。该图在测试用例中使用邻接列表表示;2、邻接列表 是

2020-11-05 16:26:54 104

原创 分割回文串(DFS+回溯+剪枝实现)

题目给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: “aab”输出:[[“aa”,“b”],[“a”,“a”,“b”]]注意点如图:对字符串进行截取,通过使用dfs+回溯的方式遍历出所有可能,然后通过剪枝的方式提升效率。注意:将符合要求的路径(list)添加到结果集时必须使用 list 的值,使用 list 对象会因为回溯而导致数据的变化。实现class Solution { public List<Li

2020-10-27 11:31:46 203

原创 被围绕的区域(DFS实现)

题目给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 ‘O’ 都不会被填充为 ‘X’。 任何不在边界上,或不与边界上的 ‘O’ 相连的 ‘O’ 最终都会被填充为 ‘X’。如果两个元素在水平或垂直

2020-10-23 15:11:28 159

原创 求根到叶子节点数字之和(DFS简单实现)

题目给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。示例 1:输入: [1,2,3]1/ 2 3输出: 25解释:从根到叶子节点路径 1->2 代表数字 12.从根到叶子节点路径 1->3 代表数字 13.因此,数字总和 = 12 + 13 = 25.注意点注意:该题不

2020-10-22 15:38:23 120

原创 单词接龙(BFS实现)

题目给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母;转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0;所有单词具有相同的长度;所有单词只由小写字母组成;字典中不存在重复的单词;你可以假设 beginWord 和 endWord 是非空的,且二者不相同。示例 1:输入:beginWord = “hit”,endW

2020-10-21 17:08:01 268

原创 三角形最小路径和(自上而下动态规划+空间优化)

题目给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。例如,给定三角形:[[2],[3,4],[6,5,7],[4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。说明:如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。注意点1、自上而下动态规划简单实现获取动

2020-10-20 14:53:46 321

原创 填充每一节点的下一个右侧节点指针Ⅱ(BFS链表实现)

题目给定一个二叉树struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。进阶:你只能使用常量级额外空间。使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。提示:树中的节点数小于 6000-100 <= node.va

2020-10-19 14:27:49 68

原创 填充每个节点的下一个右侧节点指针(BFS简单实现)

题目给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。示例:注意点1、获取每一层节点数必须在所有操作之前。实现/*// Definition for a

2020-10-19 11:12:41 79

原创 二叉树展开为链表(前序遍历逆序实现)

题目给定一个二叉树,原地将它展开为一个单链表。注意点1、我们发现展开后的链表的顺序为二叉树前序遍历的顺序(根节点->左节点->右节点,1->2->3->4->5->6);2、但我们会发现使用前序遍历的方式进行原地展开时,会丢失右子树(比如遍历到节点2时,需要将节点2作为根节点的右节点,这时会导致右子树丢失);3、所以我们考虑使用前序遍历逆序的方式实现,这样就不会丢失右子树(右节点->左节点->根节点,6<-5<-4<-3&l

2020-10-16 11:47:42 491

空空如也

空空如也

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

TA关注的人

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