![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode/剑指offer-【二叉树篇】
二叉树
魑魅魍魉114
这个作者很懒,什么都没留下…
展开
-
Leetcode230. 二叉搜索树中第K小的元素
请你设计一个算法查找其中第。个最小元素(从 1 开始计数)。给定一个二叉搜索树的根节点。原创 2023-10-15 09:01:09 · 216 阅读 · 0 评论 -
530. 二叉搜索树的最小绝对差
注意:对于根节点,根据二叉搜索数的性质,根节点和左子树中的右子树的差值是更小的,正好中序遍历满足该条件差值=4-3,而不是4-2。差值是一个正数,其数值等于两值之差的绝对值。给你一个二叉搜索树的根节点。题解:使用中序遍历来实现。原创 2023-10-14 22:45:20 · 179 阅读 · 0 评论 -
Leetcode236. 二叉树的最近公共祖先
中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。原创 2023-10-14 21:40:29 · 148 阅读 · 0 评论 -
Leetcode199. 二叉树的右视图
想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。原创 2023-09-22 22:02:42 · 428 阅读 · 0 评论 -
Leetcode129. 求根到叶子节点数字之和
树中每个节点都存放有一个。计算从根节点到叶节点生成的。给你一个二叉树的根节点。原创 2023-09-08 08:38:11 · 576 阅读 · 0 评论 -
Leetcode116. 填充每个节点的下一个右侧节点指针中等1K
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为。,其所有叶子节点都在同一层,每个父节点都有两个子节点。初始状态下,所有 next 指针都被设置为。原创 2023-09-04 09:27:25 · 306 阅读 · 0 评论 -
Leetcode113. 路径总和 II
路径总和等于给定目标和的路径。原创 2023-09-02 22:27:46 · 394 阅读 · 0 评论 -
Leetcode112. 路径总和
的路径,这条路径上所有节点值相加等于目标和。和一个表示目标和的整数。原创 2023-09-02 21:55:12 · 363 阅读 · 0 评论 -
Leetcode110. 平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。的左右两个子树的高度差的绝对值不超过 1。原创 2023-09-01 10:45:37 · 678 阅读 · 0 评论 -
Leetcode109. 有序链表转换二叉搜索树
本题中,一个高度平衡二叉树是指一个二叉树。,将其转换为高度平衡的二叉搜索树。的左右两个子树的高度差不超过 1。给定一个单链表的头节点。原创 2023-08-31 10:49:10 · 440 阅读 · 0 评论 -
Leetcode108. 将有序数组转换为二叉搜索树
二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。排列,请你将其转换为一棵。原创 2023-08-31 09:45:15 · 303 阅读 · 0 评论 -
Leetcode107. 二叉树的层序遍历 II
这道题和Leetcode102的基础层序遍历唯一的不同点是,每次for循环结束后,加入列表的结果,需要到最前面,res.add(0,list);和锯齿形层序遍历方法一样。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)原创 2023-08-31 09:28:55 · 435 阅读 · 0 评论 -
Leetcode101. 对称二叉树
给你一个二叉树的根节点。, 检查它是否轴对称。原创 2023-08-30 09:54:24 · 461 阅读 · 0 评论 -
Leetcode.100 相同的树
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。,编写一个函数来检验这两棵树是否相同。给你两棵二叉树的根节点。原创 2023-08-30 09:43:24 · 304 阅读 · 0 评论 -
Leetcode98. 验证二叉搜索树
刷这道验证二叉搜索树,看到了一位大佬的解法,和他的一些列文章和B站上的教学视频,看目录总结的很好,后面刷题会跟着他的内容一起学习起来。,判断其是否是一个有效的二叉搜索树。给你一个二叉树的根节点。原创 2023-08-29 11:22:50 · 290 阅读 · 0 评论 -
JZ32 Ⅱ从上到下打印二叉树
解析思路:利用层序遍历+队列来实现,一层一层的遍历。原创 2023-07-02 17:20:48 · 163 阅读 · 0 评论 -
Leetcode226 翻转二叉树
【代码】Leetcode226 翻转二叉树。原创 2023-03-17 20:57:44 · 119 阅读 · 0 评论 -
Leetcode111 二叉树的最小深度
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。方法1:递归方法一:深度优先搜索思路及解法首先可以想到使用深度优先搜索的方法,遍历整棵树,记录最小深度。对于每一个非叶子节点,我们只需要分别计算其左右子树的最小叶子节点深度。这样就将一个大问题转化为了小问题,可以递归地解决该问题。实现代码:public int minDepth(TreeNode root) { if(root == nu.原创 2022-05-14 21:13:37 · 135 阅读 · 0 评论 -
Leetcode104 二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。 3 / \ 9 20 / \ 15 7二叉树的深度为3方法一:递归(推荐使用)知识点:二叉树递归递归是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。因此递归过程,最重要的就是查看能不能讲原本的问题分解为更小的子问题,这..原创 2022-05-14 17:07:10 · 260 阅读 · 0 评论 -
Leetcode145 二叉树的后序遍历
给你一棵二叉树的根节点root,返回其节点值的后序遍历知识点:栈栈是一种仅支持在表尾进行插入和删除操作的线性表,这一端被称为栈顶,另一端被称为栈底。元素入栈指的是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;元素出栈指的是从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。思路:既然二叉树的前序遍历和中序遍历都可以使用栈来代替递归,那后序遍历是否也可以呢?答案是可以的,但是会比前二者复杂一点点。根据后序遍历“左右中”的顺序,那么后序遍历...原创 2022-05-12 11:19:04 · 499 阅读 · 0 评论 -
Leetcode94 二叉树的中序遍历
给定一个二叉树的根节点root,返回它的中序遍历方法1:递归知识点:二叉树递归递归是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。因此递归过程,最重要的就是查看能不能讲原本的问题分解为更小的子问题,这是使用递归的关键。而二叉树的递归,则是将某个节点的左子树、右子树看成一颗完整的树,那么对于子树的访问或者操作就是对于原树的访问或者操作的子问题,因此可以自我调用函数不断进入子树。思路:...原创 2022-05-12 09:59:28 · 240 阅读 · 0 评论 -
Leetcode144 二叉树的前序遍历
给你二叉树的根节点root,返回它节点值的前序遍历。知识点:二叉树递归递归是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。因此递归过程,最重要的就是查看能不能讲原本的问题分解为更小的子问题,这是使用递归的关键。而二叉树的递归,则是将某个节点的左子树、右子树看成一颗完整的树,那么对于子树的访问或者操作就是对于原树的访问或者操作的子问题,因此可以自我调用函数不断进入子树。思路:什么是二叉树...原创 2022-05-11 12:39:24 · 196 阅读 · 0 评论 -
Leetcoe103. 二叉树的锯齿形层序遍历
思路:我们可以利用两个栈遍历这棵二叉树,第一个栈s1从根节点开始记录第一层,然后依次遍历两个栈,遍历第一个栈时遇到的子节点依次加入第二个栈s2中,即是第二层//遍历奇数层while(!s1.empty()){ TreeNode* node = s1.top(); //记录奇数层 temp.push_back(node->val); //奇数层的子节点加入偶数层 if(node->left) s2.push(node->...原创 2022-05-11 08:14:37 · 192 阅读 · 0 评论 -
Leetcode102. 二叉树的层序遍历
给定一个节点数为 n 二叉树,要求从上到下按层打印二叉树的 val 值,同一层结点从左至右输出,每一层输出一行,将输出的结果存放到一个二维数组中返回。例如:给定的二叉树是{1,2,3,#,#,4,5}该二叉树多行打印层序遍历的结果是[[1],[2,3],[4,5]]思路:题目要求将二叉树按行打印,即按层打印,其中每层分开。不难想到,要使用层次遍历,但是难点在于如何每层分开存储,从哪里知晓分开的时机?在层次遍历的时候,我们通常会借助队列(queue),事实上,.原创 2022-05-11 07:55:38 · 97 阅读 · 0 评论 -
JZ32 从上往下打印二叉树
不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面返回借助队列的先进先出特性来实现,先把根节点进入到队列中代码实现:public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> res .原创 2022-05-10 22:48:57 · 118 阅读 · 0 评论 -
Leetcode662 二叉树得最大宽度
思路分析: * 假设满二叉树表示成数组序列, 根节点所在的位置为1, * 则任意位于i节点的左右子节点的pos为2*i, 2*i+1。 * 用一个List保存每层的左端点,易知二叉树有多少层List的元素就有多少个。 * 那么可以在dfs的过程中记录每个节点的pos及其所在的层level, * 如果level>List.size()说明当前节点就是新的一层的最左节点, 将其 加入List中, * 否则判断当前节点的index减去List中对应..原创 2021-02-25 09:56:14 · 169 阅读 · 1 评论