二叉树
二叉树
qxlxi
21届本,后端工程师 (专注于Java、Go、数据库、缓存、消息队列、网络、OS、算法、软件设计、DevOps、云原生、大数据、分布式系统架构设计等)
展开
-
【每日一题-leetcode】530. 二叉搜索树的最小绝对差
530. 二叉搜索树的最小绝对差 ☆ 难度简单192 给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。 示例: 输入: 1 \ 3 / 2 输出: 1 //因为中序遍历是有序的,我们只需要在中序遍历的过程中 记录上一个节点 //然后当前root节点进行比较 求出最小值就可以 //时间复杂度O(N) TreeNode tmp = null; private int min = Integer.MAX_VALUE; public原创 2020-10-12 21:41:21 · 332 阅读 · 0 评论 -
【每日一题-leetcode】99. 恢复二叉搜索树
99. 恢复二叉搜索树 恢复二叉搜索树 Difficulty: 困难 二叉搜索树中的两个节点被错误地交换。 请在不改变其结构的情况下,恢复这棵树。 示例 1: 输入: [1,3,null,null,2] 1 / 3 \ 2 输出: [3,1,null,null,2] 3 / 1 \ 2 示例 2: 输入: [3,1,4,null,null,2] 3 / \ 1 4 / 2 输出: [2,1,4,null,null,3] 2 / \ 1 4 / 3 进阶: 使用 O(n) 空间原创 2020-08-08 11:00:56 · 310 阅读 · 0 评论 -
【每日一题-leetcode】100. 相同的树
100. 相同的树 相同的树 难度简单424 给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3] 输出: true 示例 2: 输入: 1 1 / \原创 2020-08-07 10:36:56 · 297 阅读 · 0 评论 -
【每日一题-leetcode】114. 二叉树展开为链表
114. 二叉树展开为链表 二叉树展开为链表 难度中等420 给定一个二叉树,原地将它展开为一个单链表。 例如,给定二叉树 1 / \ 2 5 / \ \ 3 4 6 将其展开为: 1 \ 2 \ 3 \ 4 \ 5 \ 6 // 树的解决方式dfs(先序遍历,中序遍历,后序遍历) // bds(层序遍历) // 而本题只能用dfs 通过交换左右子树的原创 2020-07-18 09:49:17 · 302 阅读 · 0 评论 -
【每日一题-leetcode】124. 二叉树中的最大路径和
124. 二叉树中的最大路径和 二叉树中的最大路径和 难度困难595 给定一个非空二叉树,返回其最大路径和。 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。 示例 1: 输入: [1,2,3] 1 / \ 2 3 输出: 6 private int res = Integer.MIN_VALUE; public int maxPathSum(TreeNode root) { if(r原创 2020-07-14 10:49:26 · 507 阅读 · 0 评论 -
【每日一题-leetcode】108. 将有序数组转换为二叉搜索树
108. 将有序数组转换为二叉搜索树 将有序数组转换为二叉搜索树 难度简单510 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5 分治 思路 有序数原创 2020-07-11 10:41:37 · 298 阅读 · 0 评论 -
【每日一题-leetcode】617.合并二叉树
617.合并二叉树 合并二叉树 难度简单412 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。 示例 1: 输入: Tree 1 Tree 2 1 2原创 2020-07-09 12:39:25 · 334 阅读 · 0 评论 -
【每日一题-leetcode】543.二叉树的直径
543.二叉树的直径 二叉树的直径 难度简单397 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 : 给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 1.dfs 最长直径。可能有三种情况、1.要么在左子树中 2.要么在右子树中原创 2020-07-07 09:52:44 · 341 阅读 · 0 评论 -
【每日一题-leetcode】538.把二叉搜索树转换为累加树
538.把二叉搜索树转换为累加树 把二叉搜索树转换为累加树 难度简单275 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。 例如: 输入: 原始二叉搜索树: 5 / \ 2 13 输出: 转换为累加树: 18 / \ 20原创 2020-07-06 08:54:08 · 279 阅读 · 0 评论 -
【每日一题-leetcode】437.路径总和
437.路径总和 路径总和 III 难度简单472 给定一个二叉树,它的每个结点都存放着一个整数值。 找出路径和等于给定数值的路径总数。 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。 二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。 示例: root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 10 / \ 5 -3原创 2020-07-03 10:42:30 · 427 阅读 · 0 评论 -
【每日一题-leetcode】101.对称二叉树
101.对称二叉树 对称二叉树 难度简单882 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3 递归终止条件 当都是空指针 说明两者相等。 如果一个为null 一个不为null 说明两者不等返回false 递归原创 2020-07-01 18:08:18 · 297 阅读 · 0 评论 -
【左神算法】判断一颗树是不是完全二叉树
题目 判断一棵树是否是完全二叉树 思路 完全二叉树 依序从左到右添加节点 。满二叉树是完全二叉树 完全二叉树不是满二叉树、 那么对于几个节点就可能出现4种情况 a.该节点左右孩子都存在。 b.该节点左孩子不不存在 右孩子存在 不是完全二叉树 c.该节点左孩子不存在 右孩子也不存在 是 d.该节点左右孩子都不存在 是 code /** * @author i * @create 2020/5/17 14:49 * @Description 判断一颗树是不是完全二叉树 * 完全二叉原创 2020-05-17 15:13:02 · 663 阅读 · 0 评论 -
【每日一题-leetcode】222. 完全二叉树的节点个数
222. 完全二叉树的节点个数 完全二叉树的节点个数 难度中等156 给出一个完全二叉树,求出该树的节点个数。 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。 示例: 输入: 1 / \ 2 3 / \ / 4 5 6 输出: 6 public int countNodes(TreeNode root) {原创 2020-05-17 13:02:11 · 330 阅读 · 0 评论 -
【左神算法】已知一棵完全二叉树,求其节点的个数
1.题目 已知一棵完全二叉树,求其节点的个数 要求:时间复杂度低于O(N),N为这棵树的节点个数 2.思路&code 2.1 思路 一般来说,我们遍历二叉树需要O(n)的时间复杂度,必须将每个节点进行统计才可以计算出节点的总数。 但是我们可以从完全二叉树的特点出发,完全二叉树只有当右子树满的情况,添加一个节点,会依序从左子树到右子树。 1.先递归查找二叉树的最高深度,也就是左子树的深度。high 2.然后将root.right 右子树的左子树的深度和最高深度high比较, a.如果右子树的左子树原创 2020-05-17 12:35:55 · 1420 阅读 · 0 评论 -
【左神算法】二叉树的先序、中序、后序遍历,包括递归方式和非递归方式
二叉树的先序、中序、后序遍历,包括递归方式和非递归方式 1、二叉树的前序遍历 1.1 思路: 二叉树是一个由left子节点和right子节点 以及val组成的数据结果。而前序遍历的过程就是 根左右。 而实现前序遍历,我们可以用两种方式一种是递归实现,先添加val,递归左右子节点。一种非递归实现, 递归的实现就是系统帮我们自行压栈操作,因此可以借助栈结构来实现。先添加root节点,当栈不为null 保存root.val 以及压入左子节点和右子节点。如此反复。 时间复杂度:二叉树的遍历需要花费O(n) 如果不原创 2020-05-15 11:19:26 · 1284 阅读 · 0 评论 -
【剑指offer】55.-II 平衡二叉树
55.-II 平衡二叉树 面试题55 - II. 平衡二叉树 难度简单19 输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回 true 。 示例 2: 给定二...原创 2020-05-05 16:52:53 · 304 阅读 · 0 评论 -
【剑指offer】54.二叉树的第K大节点
54.二叉树的第K大节点 面试题54. 二叉搜索树的第k大节点 难度简单21 给定一棵二叉搜索树,请找出其中第k大的节点。 示例 1: 输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2 输出: 4 示例 2: 输入: root = [5,3,6,2,4,null,null,1], k = 3 5 /...原创 2020-05-05 16:33:43 · 254 阅读 · 0 评论 -
【剑指offer】36. 二叉搜索树与双向链表
36. 二叉搜索树与双向链表 难度中等31 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 为了让您更好地理解问题,以下面的二叉搜索树为例: 我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。 下图展示了上面的...原创 2020-04-28 15:50:10 · 271 阅读 · 0 评论 -
【每日一题-leetcode】105.从前序与中序遍历序列构造二叉树
105.从前序与中序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树 难度中等422 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15...原创 2020-04-27 15:39:34 · 348 阅读 · 0 评论 -
【每日一题-leetcode】297.二叉树的序列化与反序列化
297.二叉树的序列化与反序列化 二叉树的序列化与反序列化 难度困难176 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。 请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且...原创 2020-04-26 12:40:27 · 332 阅读 · 0 评论 -
【每日一题-leetcode】236.二叉树的最近公共祖先
236.二叉树的最近公共祖先 二叉树的最近公共祖先 难度中等466 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null...原创 2020-04-24 17:39:19 · 286 阅读 · 0 评论 -
【每日一题-leetcode】235.二叉搜索树的最近公共祖先
235.二叉搜索树的最近公共祖先 二叉搜索树的最近公共祖先 难度简单266 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉搜索树: root = [6,2,8,0,4,...原创 2020-04-24 17:38:03 · 312 阅读 · 0 评论 -
【每日一题-leetcode】104.二叉树的最大深度
104.二叉树的最大深度 二叉树的最大深度 难度简单513 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3 。 //D...原创 2020-04-23 16:40:03 · 293 阅读 · 0 评论 -
【每日一题-leetcode】226.翻转二叉树
226.翻转二叉树 翻转二叉树 难度简单413 翻转一棵二叉树。 示例: 输入: 4 / \ 2 7 / \ / \ 1 3 6 9 输出: 4 / \ 7 2 / \ / \ 9 6 3 1 1.DFS time : O(n) space: O(n) 最好 O(1) 最坏 O(n)退换成链表...原创 2020-04-23 16:15:15 · 337 阅读 · 0 评论 -
【剑指offer】34.二叉树中和为某一值的路径
34.二叉树中和为某一值的路径 面试题34. 二叉树中和为某一值的路径 难度中等27 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 ...原创 2020-04-22 21:55:15 · 319 阅读 · 0 评论 -
【剑指offer】33.二叉搜索树的后序遍历序列
33.二叉搜索树的后序遍历序列 面试题33. 二叉搜索树的后序遍历序列 难度中等39 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树: 5 / \ 2 6 / \ 1 3 示例 1: 输入: [1,6,3,2,5] 输出: fals...原创 2020-04-22 18:26:45 · 305 阅读 · 0 评论 -
【每日一题-leetcode】98.验证二叉搜索树
98.验证二叉搜索树 验证二叉搜索树 难度中等513 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入: 2 / \ 1 3 输出: true 示例 2: 输入: 5 / \ ...原创 2020-04-22 17:51:04 · 296 阅读 · 0 评论 -
【剑指offer】32-3 从上到下打印二叉树 III
32-3 从上到下打印二叉树 III 面试题32 - III. 从上到下打印二叉树 III 难度中等15 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 1...原创 2020-04-21 21:49:35 · 261 阅读 · 0 评论 -
【剑指offer】32-2 从上到下打印二叉树 II
32-2 从上到下打印二叉树 II 面试题32 - II. 从上到下打印二叉树 II 难度简单17 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [3], [9,20], [...原创 2020-04-21 10:50:20 · 246 阅读 · 0 评论 -
【剑指offer】32-1 从上到下打印二叉树
32-1 从上到下打印二叉树 面试题32 - I. 从上到下打印二叉树 难度中等10 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回: [3,9,20,15,7] th:一个队列存储遍历的节点,先存储root结点...原创 2020-04-20 18:18:54 · 310 阅读 · 0 评论 -
【每日一题-leetcode】429.N叉数的层序遍历
429.N叉数的层序遍历 N叉树的层序遍历 难度中等76 给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。 例如,给定一个 3叉树 : 返回其层序遍历: [ [1], [3,2,4], [5,6] ] 1.队列实现广度优先搜索 time:O(n) space:O(n) //1.用队列实现广度优先搜索 //2.一个list 一个...原创 2020-04-08 15:29:58 · 297 阅读 · 0 评论 -
【每日一题-leetcode】589.N叉树的前序遍历
589.N叉树的前序遍历 N叉树的前序遍历 难度简单71 给定一个 N 叉树,返回其节点值的前序遍历。 例如,给定一个 3叉树 : 返回其前序遍历: [1,3,5,6,2,4]。 1.递归 //前序遍历 根左右 递归调用即可。 //先将节点的值存储到linkedList中 LinkedList<Integer> linkedLis...原创 2020-04-07 17:59:21 · 394 阅读 · 0 评论 -
【每日一题-leetcode】590.N叉数的后序遍历
590.N叉数的后序遍历 N叉树的后序遍历 难度简单58 给定一个 N 叉树,返回其节点值的后序遍历。 例如,给定一个 3叉树 : 返回其后序遍历: [5,6,3,2,4,1]. 1.递归 时间复杂度:O(n) 空间复杂度:O(n) LinkedList<Integer> linkedList = new LinkedList(); //1.一个LikedL...原创 2020-04-07 17:26:24 · 311 阅读 · 1 评论 -
【剑指offer】28.对称的二叉树
28.对称的二叉树 面试题28. 对称的二叉树 难度简单25 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ ...原创 2020-04-07 10:35:58 · 271 阅读 · 0 评论 -
【剑指offer】27.二叉树的镜像
27.二叉树的镜像 面试题27. 二叉树的镜像 难度简单15 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 例如输入: 4 / \ 2 7 / \ / \1 3 6 9 镜像输出: 4 / \ 7 2 / \ / \9 6 3 1 示例 1: 输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1...原创 2020-04-07 10:09:40 · 289 阅读 · 0 评论 -
【剑指offer】26.树的子结构
26.树的子结构 面试题26. 树的子结构 难度中等37 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A: 3 / \ 4 5 / \ 1 2 给定的树 B: 4 / 1 返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。 示例 1: 输入:...原创 2020-04-06 21:23:25 · 337 阅读 · 0 评论 -
【剑指offer】7.重建二叉树
7.重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 th:前序遍历第一个数就是root节点,而我们用map记录中序顺序...原创 2020-03-29 15:37:01 · 224 阅读 · 0 评论 -
【每日一题-leetcode】144.二叉树的前序遍历
144.二叉树的前序遍历 给定一个二叉树,返回它的 前序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3] 1.递归法 public List<Integer> preorderTraversal(TreeNode root) { List<Integer> result = new ArrayL...原创 2020-03-27 18:37:01 · 306 阅读 · 0 评论 -
【每日一题-leetcode】94.二叉树的中序遍历
94.二叉树的中序遍历 给定一个二叉树,返回它的中序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 1.递归法 我们知道二叉树的遍历有前序遍历 中序遍历 后序遍历。 前序遍历 :根左右 中序遍历:左根右 后序遍历:左右根 时间复杂度:O(n)。递归函数 T(n) = 2*T(n/2)+1 空间辅助度:最坏情况下需要空间O(n),平均情况为O(...原创 2020-03-27 18:00:33 · 306 阅读 · 0 评论