![](https://img-blog.csdnimg.cn/20200420113524941.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
剑指offer
`
zlinzju
这个作者很懒,什么都没留下…
展开
-
[剑指offer] 36. 二叉搜索树与双向链表
题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。需要返回双向链表最左侧的节点。思路排序链表:利用二叉搜索树的中序遍历为递增序列,从小到大访问节点双向链表:构造链表时,需要设置前驱节点 pre ,并且 pre.right = cur 的同时也要 cur.left = pre循环链表:构造双向链表时记录头尾节点,...原创 2020-08-07 10:41:28 · 98 阅读 · 0 评论 -
[剑指offer] 33. 二叉搜索树的后序遍历序列
文章目录题目思路方法1:递归题目输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。思路先明晰概念:后序遍历定义: [ 左子树 | 右子树 | 根节点 ] ,即遍历顺序为:左、右、根 。二叉搜索树定义: 左子树中所有节点的值 < 根节点的值;右子树中所有节点的值 > 根...原创 2020-08-07 10:43:33 · 115 阅读 · 0 评论 -
[剑指offer] 55-2. 平衡二叉树
题目输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。注意:规定空树也是一棵平衡二叉树。v1:后序遍历+剪枝后序遍历,从底至顶,返回子树深度,若判定某子树不是平衡树则 “剪枝” ,即,直接返回。depth(root) 函数:计算树root的深度+判断子树平衡返回值:当节点root 左 / 右子树的深度差...原创 2020-08-07 10:43:28 · 87 阅读 · 0 评论 -
[剑指offer] 27. 二叉树的镜像
题目思路递归 或者 栈。 递归就是左右子树的解构成了二叉树的解。栈就是由根节点开始,遍历各节点,执行交换操作。注意, 因为root.left=mirror(root.right)已经把root.left改变了,所以如果是分步实现左右子树的镜像交换,则需要在被改之前先把root.left存起来,后面调用。### 简化版class Solution: def mirrorTr...原创 2020-08-07 10:43:20 · 89 阅读 · 0 评论 -
[剑指offer] 8.二叉树的下一个节点
题目给定一个二叉树和其中一个节点,找出该节点在中序遍历序列中的下一个节点。注意:树中的节点除了有两个分别指向左右子节点的指针,还有一个指向父节点的指针。如果给定的节点是中序遍历序列的最后一个,则返回空节点。二叉树一定不为空,且给定的节点一定不是空节点。分情况讨论即可,如下图所示:思路如果当前节点有右孩子,则右子树中最左侧的节点就是当前节点的后继。比如F的后继是H。寻找过程和中...原创 2020-08-07 10:43:13 · 97 阅读 · 0 评论 -
[剑指offer] 35.复杂链表的复刻
文章目录题目思路哈希表新旧节点交错法错误片段完整代码题目请实现一个函数可以复制一个复杂链表。在复杂链表中,每个结点除了有一个指针指向下一个结点外,还有一个额外的指针指向链表中的任意结点或者null。要求返回这个链表的 深拷贝。我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:val:一个表示Node.val 的整...原创 2020-08-07 10:40:45 · 89 阅读 · 0 评论 -
[剑指Offer] 52. 两个链表的第一个公共结点
tree一般存在堆里,调用的时候使用栈原创 2020-08-07 10:42:14 · 211 阅读 · 0 评论 -
[剑指offer] 25. 合并两个排序的链表
文章目录题目思路v1:二路归并(推荐)v2:递归代码v1代码v2题目输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。样例输入:1->3->5 , 2->4->5输出:1->2->3->4->5->5思路v1:二路归并(推荐)【1】新建头部的保护结点dummy,设置cur指针指向dummy。【2...原创 2020-08-07 10:40:24 · 78 阅读 · 0 评论 -
[剑指offer] 22.链表中倒数第k个节点
思路代码v1# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solution(object): def findKthToTail(sel...原创 2020-08-07 10:40:15 · 72 阅读 · 0 评论 -
[剑指offer] 18-2. 删除链表中重复的节点
文章目录题目思路代码题目在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留。样例1输入:1->2->3->3->4->4->5输出:1->2->5 样例2输入:1->1->1->2->3输出:2->3思路有序链表,因此重复的节点一定是相邻的。可以用快慢指针确定重复区域...原创 2020-08-07 10:40:34 · 74 阅读 · 0 评论 -
[剑指offer] 18-1. 在O(1)内删除链表节点
文章目录题目思路代码题目给定单向链表的一个节点指针,定义一个函数在O(1)时间删除该结点。假设链表一定存在,并且该节点一定不是尾节点。样例输入:链表 1->4->6->8,删掉节点:2,第2个节点即6(头节点为第0个节点)输出:新链表 1->4->8注:链表题目输入的数字均表示节点的索引(由0开始),节点2也就是值为6的节点。思路在单链表中删除...原创 2020-08-07 10:39:51 · 142 阅读 · 0 评论 -
[剑指offer] 23. 链表中环的入口结点
文章目录题目思路算法1(推荐)代码算法2题目给定一个链表,若其中包含环,则输出环的入口节点。若其中不包含环,则输出null。给定如上所示的链表:[1, 2, 3, 4, 5, 6]2则输出环的入口节点3.注意,样例里的2表示编号是2的节点,节点编号从0开始。所以编号是2的节点就是val等于3的节点。输出3。思路使用快慢指针法。有两种做法,推荐第一种。Ps:链表之所以为链,...原创 2020-08-07 10:40:02 · 85 阅读 · 0 评论 -
[剑指offer] 24. 反转链表
算法1(链表操作,迭代) O(n)翻转即把所有节点的next指针指向前驱节点。由于是单链表,我们在迭代时不能直接找到前驱节点,所以我们需要一个额外的指针保存前驱节点。同时在改变当前节点的next指针前,不要忘记保存它的后继节点。空间复杂度分析:遍历时只有3个额外变量,所以额外的空间复杂度是 O(1)时间复杂度分析:只遍历一次链表,时间复杂度是 O(n)遍历的时候,需要把当前节点cur...原创 2020-08-07 10:39:42 · 117 阅读 · 0 评论 -
[剑指offer] 6.从尾到头打印链表
题目:输入一个链表的头节点,按链表值从尾到头的顺序返回一个ArrayList。样例输入:[2, 3, 5]返回:[5, 3, 2]# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self...原创 2020-08-07 10:41:19 · 84 阅读 · 0 评论