剑指offer
still_learning
这个作者很懒,什么都没留下…
展开
-
【剑指offer】<树--中等>【JZ68 二叉搜索树的最近公共祖先】
描述给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。1.对于该题的最近的公共祖先定义:对于有根树T的两个节点p、q,最近公共祖先LCA(T,p,q)表示一个节点x,满足x是p和q的祖先且x的深度尽可能大。在这里,一个节点也可以是它自己的祖先.2.二叉搜索树是若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值3.所有节点的值都是唯一的。4.p、q 为不同节点且均存在于给定的二叉搜索树中。原创 2022-02-20 21:43:31 · 301 阅读 · 0 评论 -
【剑指offer】<树--中等>【JZ8 二叉树的下一个结点】
给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。下图为一棵有9个节点的二叉树。树中从父节点指向子节点的指针用实线表示,从子节点指向父节点的用虚线表示原创 2022-01-22 19:32:05 · 702 阅读 · 0 评论 -
【剑指offer】<树--中等>【JZ78 把二叉树打印成多行】
给定一个节点数为 n 二叉树,要求从上到下按层打印二叉树的 val 值,同一层结点从左至右输出,每一层输出一行,将输出的结果存放到一个二维数组中返回。原创 2022-01-22 18:05:33 · 346 阅读 · 0 评论 -
【剑指offer】<树--中等>【JZ33 二叉搜索树的后序遍历序列】
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。原创 2022-01-21 15:16:27 · 565 阅读 · 0 评论 -
【剑指offer】<树--中等>【JZ7 重建二叉树】
JZ7 重建二叉树原创 2022-01-18 15:48:42 · 301 阅读 · 0 评论 -
【剑指offer】<树--中等>【JZ26 树的子结构】
输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构)原创 2022-01-17 21:48:33 · 251 阅读 · 0 评论 -
【剑指offer】<树--中等>【JZ54 二叉搜索树的第k个节点】
给定一棵结点数为n 二叉搜索树,请找出其中的第 k 小的TreeNode结点值。1.返回第k小的节点值即可2.不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-13.保证n个节点的值不一样原创 2022-01-17 19:55:26 · 216 阅读 · 0 评论 -
【剑指offer】<树--中等>【JZ34 二叉树中和为某一值的路径(二)】
v1思路: 对比上一道题,只是简单的增加一个结点的记录,并且把经过的结点另存即可。class Solution: res = [] def dfs(self, root, tarsum, mysum, nodelist=[]): #分别是当前结点,目标和,当前和,当前结点列表 if not root: return mysum = mysum + root.val nodelist.append(root.val.原创 2022-01-17 17:06:37 · 201 阅读 · 0 评论 -
【剑指offer】<树--简单>【JZ82 二叉树中和为某一值的路径(一)】
给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。原创 2022-01-17 13:59:17 · 175 阅读 · 0 评论 -
【剑指offer】<树--中等>【JZ36 二叉搜索树与双向链表】
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。原创 2022-01-17 13:34:21 · 213 阅读 · 0 评论 -
【剑指offer】<树--中等>【JZ86 在二叉树中找到两个节点的最近公共祖先】
给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。原创 2022-01-16 21:46:10 · 279 阅读 · 0 评论 -
【剑指offer】<树--简单>【JZ28 对称的二叉树】
v1 – 递归简单分析一下题目,分析是否对称需要对比根节点的左右子树,在尝试自己比较时,我们可以认识到很关键的一个点—遍历左子树和遍历右子树的顺序是不同的!在左子树,我们是先左到右;在右子树,我们是先右到左。这样才能构成镜像。那么如何对比呢?那只需要把经过的结点都存下来,最后对比一下即可!def preorder(root, isLeftFirst=True): #这里定义了一个超参数,isLeftFirst,来使得遍历方向在左右子树不同。 if not root: r.原创 2022-01-15 20:14:40 · 275 阅读 · 0 评论 -
【剑指offer】<树--简单>【JZ79 判断是不是平衡二叉树】
输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。原创 2022-01-15 00:20:12 · 160 阅读 · 0 评论 -
【剑指offer】<树--简单>【JZ32 从上往下打印二叉树】
不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。原创 2022-01-13 12:04:06 · 192 阅读 · 0 评论 -
【剑指offer】<树--简单>【JZ27 二叉树的镜像】
操作给定的二叉树,将其变换为源二叉树的镜像。数据范围:二叉树的节点数 0 \le n \le 10000≤n≤1000 , 二叉树每个节点的值 0\le val \le 10000≤val≤1000要求: 空间复杂度 O(n)O(n) 。本题也有原地操作,即空间复杂度 O(1)O(1) 的解法,时间复杂度 O(n)O(n)原创 2022-01-13 11:49:20 · 120 阅读 · 0 评论 -
【剑指offer】<树--中等>【JZ77 按之字形顺序打印二叉树】
给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)数据范围:0 \le n \le 15000≤n≤1500,树上每个节点的val满足 |val| <= 100∣val∣<=100要求:空间复杂度:O(n)O(n),时间复杂度:O(n)O(n)原创 2022-01-12 17:16:57 · 222 阅读 · 0 评论 -
【剑指offer】<树--简单>【JZ55 二叉树的深度】
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 1原创 2022-01-11 11:01:45 · 252 阅读 · 2 评论 -
【剑指offer】<动态规划--中等>【JZ85 连续子数组的最大和(二)】
输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,找到一个具有最大和的连续子数组。1.子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组2.如果存在多个最大和的连续子数组,那么返回其中长度最长的,该题数据保证这个最长的只存在一个3.该题定义的子数组的最小长度为1,不存在为空的子数组,即不存在[]是某个数组的子数组4.返回的数组不计入空间复杂度计算原创 2022-01-09 19:05:14 · 481 阅读 · 0 评论 -
【剑指offer】<动态规划--中等>【JZ47 礼物的最大价值】
在一个m\times nm×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?原创 2022-01-07 21:51:54 · 377 阅读 · 0 评论 -
【剑指offer】<动态规划--简单>【JZ63 买卖股票的最好时机(一)】
class Solution: def maxProfit(self , prices: List[int]) -> int: if prices.__len__() < 2: return 0 minPrice = prices[0]# maxPrice = prices[1] maxReward = 0 for cur in prices: if cur < minP原创 2022-01-06 11:10:44 · 653 阅读 · 1 评论 -
【剑指offer】<动态规划--简单>【JZ42 连续子数组的最大和】
输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。原创 2022-01-05 22:45:23 · 280 阅读 · 0 评论 -
【剑指offer】<动态规划--简单>【JZ71 跳台阶扩展问题】
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。原创 2022-01-05 21:11:02 · 320 阅读 · 0 评论 -
【剑指offer】<动态规划--入门>【JZ10 斐波那契数列】
大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。斐波那契数列是一个满足 fib(x)= 1 & {x=1,2}\\ fib(x-1)+fib(x-2) &{x>2}\\fib(x−1)+fib(x−2)x=1,2x>2的数列要求:空间复杂度 O(1)O(1),时间复杂度 O(原创 2022-01-05 20:44:53 · 188 阅读 · 0 评论 -
【剑指offer】<简单>【JZ18 删除链表的节点】
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。1.此题对比原题有改动2.题目保证链表中节点的值互不相同3.该题只会输出返回的链表和结果做对比,所以若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点原创 2022-01-04 03:47:06 · 134 阅读 · 0 评论 -
【剑指offer】<较难>【JZ76 删除链表中重复的结点】
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5数据范围:链表长度满足 ,链表中的值满足 进阶:空间复杂度 ,时间复杂度原创 2022-01-04 03:27:48 · 67 阅读 · 0 评论 -
【剑指offer】<较难>【JZ35 复杂链表的复制】--递归错误小结
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。 下图是一个含有5个结点的复杂链表。图中实线箭头表示next指针,虚线箭头表示random指针。为简单起见,指向null的指针没有画出。原创 2022-01-04 00:39:12 · 256 阅读 · 0 评论 -
【剑指offer】<easy>【JZ23 链表中环的入口结点】
给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。数据范围: n\le10000n≤10000,1<=结点值<=100001<=结点值<=10000要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)原创 2022-01-03 22:23:11 · 181 阅读 · 0 评论 -
【剑指Offer】<easy>【JZ52 两个链表的第一个公共结点】
输入分为是3段,第一段是第一个链表的非公共部分,第二段是第二个链表的非公共部分,第三段是第一个链表和二个链表的公共部分。 后台会将这3个参数组装为两个链表,并将这两个链表对应的头节点传入到函数FindFirstCommonNode里面,用户得到的输入只有pHead1和pHead2。原创 2022-01-03 21:47:53 · 476 阅读 · 0 评论 -
【剑指Offer】<easy>【JZ25合并两个排序的链表】
输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。数据范围: 0 \le n \le 10000≤n≤1000,-1000 \le 节点值 \le 1000−1000≤节点值≤1000要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)原创 2022-01-03 00:18:49 · 173 阅读 · 0 评论 -
【剑指Offer】快速刷题--总结心得
描述给定一个单链表的头结点pHead,长度为n,反转该链表后,返回新链表的表头。数据范围: n\leq1000n≤1000要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) 。如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。以上转换过程如下图所示:原创 2022-01-02 23:36:04 · 145 阅读 · 0 评论