随笔分类 - 算法刷题之旅
【剑指offer】25.二叉树的下一个结点
摘要:总目录: 算法之旅导航目录 1.问题描述 给定一个二叉树其中的任意一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。 数据范围:节点数满足 1≤n≤50,节点上的值满足 1≤val≤100 要求:空间复杂度 O(1) ,时间复杂度
【剑指offer】24.二叉搜索树与双向链表
摘要:总目录: 算法之旅导航目录 1.问题描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示 数据范围:输入二叉树的节点数 0≤n≤1000,二叉树中每个节点的值 0≤val≤1000 要求:空间复杂度O(1)即在原树上操作),时间复杂度 O(n) 注意: 1.要求不能创建任何新
【剑指offer】23.二叉搜索树的后序遍历序列
摘要:总目录: 算法之旅导航目录 1.问题描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。 数据范围: 节点数量 0≤n≤1000 ,节点上的值满足 1≤val≤10^5,保证节点上的值各不相同
【剑指offer】22.树的子结构
摘要:总目录: 算法之旅导航目录 1.问题描述 输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构) 假如给定A为{8,8,7,9,2,#,#,#,#,4,7},B为{8,9,2},2个树的结构如下,可以看出B是A的子结构 2.问题分析 1递归 注意以下条件: (1)空树不
【剑指offer】21.重建二叉树
摘要:总目录: 算法之旅导航目录 1.问题描述 给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}。 提示: 1.vin.length == pre.length 2
【剑指offer】20.二叉搜索树的第k个节点
摘要:总目录: 算法之旅导航目录 1.问题描述 给定一棵结点数为n 二叉搜索树,请找出其中的第 k 小的TreeNode结点值。 1.返回第k小的节点值即可 2.不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-1 3.保证n个节点的值不一样 数据范围: 0≤n≤1000,0≤k≤100
【剑指offer】19.按之字形顺序打印二叉树
摘要:总目录: 算法之旅导航目录 1.问题描述 给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替) 数据范围:0≤n≤1500,树上每个节点的val满足 ∣val∣<=1500 要求:空间复杂度:O(n),时间复杂度:O(n) 例如: 给定的二叉树是{1,2,3
【剑指offer】18.二叉搜索树的最近公共祖先
摘要:总目录: 算法之旅导航目录 1.问题描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 1.对于该题的最近的公共祖先定义:对于有根树T的两个节点p、q,最近公共祖先LCA(T,p,q)表示一个节点x,满足x是p和q的祖先且x的深度尽可能大。在这里,一个节点也可以是它自己的祖先. 2.
【剑指offer】17.对称的二叉树
摘要:总目录: 算法之旅导航目录 1.问题描述 给定一棵二叉树,判断其是否是自身的镜像(即:是否对称) 2.问题分析 1 递归 3.代码实例 递归 1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode
【剑指offer】16.判断是不是平衡二叉树
摘要:总目录: 算法之旅导航目录 1.问题描述 输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1(<=1)
【剑指offer】15.二叉树中和为某一值的路径(二)
摘要:总目录: 算法之旅导航目录 1.问题描述 输入一颗二叉树的根节点root和一个整数expectNumber,找出二叉树中结点值的和为expectNumber的所有路径。 1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点 2.叶子节点是指没有子节点的节点 3.路径只能从父节点到子节点,
【剑指offer】14.二叉树中和为某一值的路径(一)
摘要:总目录: 算法之旅导航目录 1.问题描述 给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。 1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点 2.叶子节点是指没有子节点的节点 3.路径只能从父节点到子节点,不能从子节点到父节点
【剑指offer】13.从上往下打印二叉树
摘要:总目录: 算法之旅导航目录 1.问题描述 不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。 2.问题分析 1辅助队列法,参考前
【剑指offer】12.二叉树的镜像
摘要:总目录: 算法之旅导航目录 1.问题描述 操作给定的二叉树,将其变换为源二叉树的镜像。 数据范围:二叉树的节点数 0≤n≤1000 , 二叉树每个节点的值 0≤val≤1000 要求: 空间复杂度 O(n)。本题也有原地操作,即空间复杂度 O(1)的解法,时间复杂度 O(n) 2.问题分析 1用递归
【剑指offer】11.二叉树的深度
摘要:总目录: 算法之旅导航目录 1.问题描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 1 。 数据范围:节点的数量满足 0≤n≤100,节点上的值满足 0≤val≤100 进阶:空间复杂度 O(1) ,时间
【剑指offer】10.复杂链表的复制
摘要:总目录: 算法之旅导航目录 1.问题描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。 下图是一个含有5个结
【剑指offer】9.链表中环的入口结点
摘要:总目录: 算法之旅导航目录 1.问题描述 给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。 数据范围: n≤10000,1<=结点值<=10000 要求:空间复杂度 O(1),时间复杂度 O(n) 例如,输入{1,2},{3,4,5}时,对应的环形链表如下图所示:
【剑指offer】8.删除链表中重复的结点
摘要:总目录: 算法之旅导航目录 1.问题描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5 数据范围:链表长度满足 0≤n≤1000 ,链表中的值满足 1≤val≤1000
【剑指offer】7.删除链表的节点
摘要:总目录: 算法之旅导航目录 1.问题描述 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。 1.此题对比原题有改动 2.题目保证链表中节点的值互不相同 3.该题只会输出返回的链表和结果做对比,所以若使用 C 或 C++ 语言,你不需要 free 或 de
【剑指offer】6.链表中倒数最后k个结点
摘要:总目录: 算法之旅导航目录 1.问题描述 输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。 如果该链表长度小于k,请返回一个长度为 0 的链表。 数据范围:0≤n≤10^5,0≤ai≤10^9,0≤k≤10^9 要求:空间复杂度 O(n),时间复杂度 O(n)