LeetCode树
文章平均质量分 54
leetCode树专题刷题记录
overlordmax
这个作者很懒,什么都没留下…
展开
-
440. 字典序的第K小数字
1.题目描述给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字。注意:1 ≤ k ≤ n ≤ 109。示例 :2.思路字典序就是根据数字的前缀进行排序,比如 10 < 9,因为 10 的前缀是 1,比 9 小。再比如 112 < 12,因为 112 的前缀 11 小于 12。一个节点都拥有 10 个孩子节点,因为作为一个前缀 ,它后面可以接 0~9 这十个数字。而且可以发现,整个字典序排列也就是对十叉树进行先序遍历。1, 10, 100, 101, … 11, 11原创 2021-02-25 19:19:52 · 205 阅读 · 0 评论 -
124. 二叉树中的最大路径和
1.题目描述给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:示例 2:2.思路1.路径走入一个子树,能从中获取的最大收益,不关心具体怎么走。这是一种属于递归的、自顶而下的思考方式。2.返回当前子树能向父节点 “提供” 的最大路径和。即,一条从父节点延伸下来的路径,能在当前子树中获得的最大收益。它分为三种情况,取其中最大的:(1)停在当前子树的 root,收益:原创 2020-09-08 20:02:59 · 93 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树
1.题目描述将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:2.思路二叉搜索数的中序遍历序列是有序的,把数组中间位置左边的元素作为根节点,可以保证二叉搜索树是平衡的。3.思路/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; *原创 2020-09-05 20:51:58 · 85 阅读 · 0 评论 -
1339. 分裂二叉树的最大乘积
1.题目描述给你一棵二叉树,它的根为 root 。请你删除 1 条边,使二叉树分裂成两棵子树,且它们子树和的乘积尽可能大。由于答案可能会很大,请你将结果对 10^9 + 7 取模后再返回。示例 2:2.思路(dfs)1.记二叉树中所有元素的值之和为 sum_r。2.假设我们删除的边的两个端点为 u 和 v,其中 u 是 v 的父节点,那么在这条边删除之后,其中的一棵子树以 v 为根节点,记其中所有元素之和sum_v;另一棵子树以原二叉树的根节点 root 为根节点,其中元素之和为 sum_r原创 2020-09-03 00:05:34 · 489 阅读 · 0 评论 -
94. 二叉树的中序遍历
94. 二叉树的中序遍历1.题目描述给定一个二叉树,返回它的中序 遍历。示例:进阶: 递归算法很简单,你可以通过迭代算法完成吗?2.方法1(递归)中序遍历:左子节点->根节点->右子节点3.代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * Tr...原创 2020-04-11 22:49:50 · 106 阅读 · 0 评论 -
144. 二叉树的前序遍历
144. 二叉树的前序遍历1.题目描述给定一个二叉树,返回它的 前序 遍历。示例:进阶: 递归算法很简单,你可以通过迭代算法完成吗?2.方法1(递归)前序遍历即:根节点->左子树->右子树3.代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * T...原创 2020-04-11 21:17:50 · 76 阅读 · 0 评论 -
687. 最长同值路径
687. 最长同值路径1.题目描述给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。注意:两个节点之间的路径长度由它们之间的边数表示。示例 1:输入:输出:示例 2:输入:输出:注意: 给定的二叉树不超过10000个结点。 树的高度不超过1000。2.思路深度优先遍历二叉树,如果当前节点的左子节点等于当前节点,则左...原创 2020-04-10 22:29:24 · 187 阅读 · 1 评论 -
404. 左叶子之和
404. 左叶子之和1.题目描述计算给定二叉树的所有左叶子之和。示例:2.思路前序遍历二叉树,设置标志位isleft标记是否是左子节点,如果是,则把左子节点加到结果中。3.代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; *...原创 2020-04-09 22:34:07 · 80 阅读 · 0 评论 -
对称二叉树
对称二叉树1.题目描述给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:2.方法1(递归)如果一个树的左子树与右子树镜像对称,那么这个树是对称的。因此,该问题可以转化为:两个树在什么情况下互为镜像?如果同时满足下面的条件,两个树互为镜像:它们的两个根结点具有相同的...原创 2020-01-19 12:36:55 · 133 阅读 · 0 评论 -
572. 另一个树的子树
572. 另一个树的子树1.题目描述给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1:给定的树 s:给定的树 t:示例 2:给定的树 s:给定的树 t:返回 false。2.思路1.定义函数从根节点开始比较两棵树,如果s和t都为空,则...原创 2020-04-09 20:55:04 · 79 阅读 · 0 评论 -
112. 路径总和
112. 路径总和1.题目描述给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22,返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。2.思路遍历二叉树,没遍历一个节点,sum-当...原创 2020-04-08 15:18:12 · 62 阅读 · 0 评论 -
145. 二叉树的后序遍历
145. 二叉树的后序遍历1.题目描述给定一个二叉树,返回它的后序遍历。示例:进阶: 递归算法很简单,你可以通过迭代算法完成吗?2.思路1.后序遍历中,每个根节点都要经过三次:第一次遇到它时要立即转去处理其左子树,第二次从左子树经由它转去处理右子树,第三次从右子树回来才应该处理根节点数据,然后返回上一层。2.curr开始赋值为root,代表当前遍历的节点3.只要当前节点的左子节点...原创 2020-04-01 12:23:53 · 97 阅读 · 0 评论 -
958. 二叉树的完全性检验
958. 二叉树的完全性检验1.题目描述给定一个二叉树,确定它是否是一个完全二叉树。百度百科中对完全二叉树的定义如下:若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节点。)示例 1:示例 2:提示:1.树中将会有 1 到 100 个结点。...原创 2020-03-10 20:42:36 · 146 阅读 · 0 评论 -
111. 二叉树的最小深度
111. 二叉树的最小深度1.题目描述给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最小深度 2.2.思路getMin()函数获取树的最小深度,如果节点为空(说明最小深度不会是这个子树),返回INT_MAX,如果节点为叶子节...原创 2020-03-09 23:52:41 · 85 阅读 · 0 评论 -
104. 二叉树的最大深度
104. 二叉树的最大深度1.题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。2.思路树的最大深度 = max(左子树的深度,右子树的深度)+1。3.代码/** * Definition for a...原创 2020-03-09 23:31:54 · 68 阅读 · 0 评论 -
114. 二叉树展开为链表
114. 二叉树展开为链表1.题目描述给定一个二叉树,原地将它展开为链表。例如,给定二叉树将其展开为:2.思路 如果根节点的左子树不为空,找到左子树的最右节点,把根节点的右子树接到最右节点的右子树上,然后根节点的右子树变为左子树,根节点的左子树变为空,root = root->right,遍历下一个节点作为根节点。3.代码/** * Definition for a ...原创 2020-03-09 23:05:32 · 89 阅读 · 0 评论 -
226. 翻转二叉树
226. 翻转二叉树1.题目描述翻转一棵二叉树。示例:输入:输出:2.方法1(递归)翻转一颗空树还是空树,因此,对于每一个节点,分别翻转它的子树,把该节点的左右子树交换,递归的翻转所有节点。3.代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * Tree...原创 2020-03-03 21:57:48 · 1509 阅读 · 0 评论 -
208. 实现 Trie (前缀树)
208. 实现 Trie (前缀树)1.题目描述实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:说明:1.你可以假设所有的输入都是由小写字母 a-z 构成的。2.保证所有输入均为非空字符串。2.思路1.Trie 树的结点结构:有两个数据结构(1)大小为26的数组:用来指向树中的每个节点。(2)isEnd:指示该...原创 2020-03-03 20:51:31 · 172 阅读 · 0 评论 -
669. 修剪二叉搜索树
669. 修剪二叉搜索树题目描述给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。示例 1:示例 2:思路当node.val > R,那么修剪后的二叉树必定出现在节点的左边。类似地,当node.val < L,那么...原创 2020-01-08 21:37:00 · 77 阅读 · 0 评论 -
662. 二叉树最大宽度
662. 二叉树最大宽度题目描述给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。示例 1:示例 2:示例 3:示例 4:思路二叉树层次遍历,根节点位置记为p...原创 2020-01-08 20:47:08 · 325 阅读 · 0 评论 -
655. 输出二叉树
655. 输出二叉树题目描述在一个 m*n 的二维字符串数组中输出二叉树,并遵守以下规则:1.行数 m 应当等于给定二叉树的高度。2.列数 n 应当总是奇数。3.根节点的值(以字符串格式给出)应当放在可放置的第一行正中间。根节点所在的行与列会将剩余空间划分为两部分(左下部分和右下部分)。你应该将左子树输出在左下部分,右子树输出在右下部分。左下和右下部分应当有相同的大小。即使一个子树为空而...原创 2020-01-07 23:28:03 · 121 阅读 · 0 评论 -
654. 最大二叉树
654. 最大二叉树题目描述给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。方法1 递归创建方法 construct(nums, l, r),用于找出在数组 nums 中从...原创 2020-01-07 22:50:58 · 87 阅读 · 0 评论 -
653. 两数之和 IV - 输入 BST
653. 两数之和 IV - 输入 BST题目描述给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。案例 1:案例 2:方法1 中序遍历+二分查找中序遍历是递增序列,在序列中二分查找,这种两个下标left和right,分别指向序列的头和尾,如果list[left] + list[right] < target则lef...原创 2020-01-06 23:25:37 · 134 阅读 · 0 评论 -
652. 寻找重复的子树
652. 寻找重复的子树题目描述给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。两棵树重复是指它们具有相同的结构以及相同的结点值。示例 1:下面是两个重复的子树:和思路使用深度优先搜索,其中递归函数返回当前子树的序列化结果。把每个节点开始的子树序列化结果保存在 map 中,然后判断是否存在重复的子树。代码/** * Def...原创 2020-01-06 22:57:00 · 124 阅读 · 0 评论 -
623. 在二叉树中增加一行
623. 在二叉树中增加一行题目描述给定一个二叉树,根节点为第1层,深度为 1。在其第 d 层追加一行值为 v 的节点。添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N,为 N 创建两个值为 v 的左子树和右子树。将 N 原先的左子树,连接为新节点 v 的左子树;将 N 原先的右子树,连接为新节点 v 的右子树。如果 d 的值为 1,深度 d - 1 不...原创 2020-01-06 19:00:39 · 83 阅读 · 0 评论 -
515. 在每个树行中找最大值
515. 在每个树行中找最大值题目描述您需要在二叉树的每一行中找到最大的值。示例:方法一 广度优先遍历(BFS)二叉树层次遍历,设置一个遍历maxValue记录每一层的最大值。代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left;...原创 2020-01-04 23:09:16 · 153 阅读 · 0 评论 -
513. 找树左下角的值
513. 找树左下角的值题目描述给定一个二叉树,在树的最后一行找到最左边的值。示例 1:示例 2:思路深度优先遍历,遍历的过程中记录是否到达最后一层,先遍历左子树,如果是最有一层,则输出结果。代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNo...原创 2020-01-04 20:49:28 · 127 阅读 · 0 评论 -
508. 出现次数最多的子树元素和
508. 出现次数最多的子树元素和题目描述给出二叉树的根,找出出现次数最多的子树元素和。一个结点的子树元素和定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。然后求出出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的元素(不限顺序)。示例 1输入:返回 [2, -3, 4],所有的值均只出现一次,以任意顺序返回所有值。示例 2输入:返回...原创 2020-01-03 22:04:25 · 103 阅读 · 0 评论 -
173.二叉搜索树迭代器
173.二叉搜索树迭代器题目描述实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用 next() 将返回二叉搜索树中的下一个最小的数。示例:思路控制中序遍历的进程,不要让它一次性结束,如果用解法一递归的方法去遍历那就很难控制了,所以自然而然的会想到用栈模拟递归的过程。把 stack 和 cur 作为成员变量,然后每次调用 next 就执行一次 while 循环,...原创 2020-01-03 20:05:29 · 105 阅读 · 0 评论 -
199. 二叉树的右视图
199. 二叉树的右视图题目描述给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:思路采用层次遍历,每层的最后一个节点保存起来就是有视图。代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *le...原创 2020-01-02 23:00:09 · 72 阅读 · 0 评论 -
222. 完全二叉树的节点个数
222. 完全二叉树的节点个数题目描述给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。示例:思路首先需要明确完全二叉树的定义:它是一棵空树或者它的叶子节点只出在最后两层,若最后一层不满则叶...原创 2020-01-02 22:46:01 · 106 阅读 · 0 评论 -
230. 二叉搜索树中第K小的元素
230. 二叉搜索树中第K小的元素题目描述给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例 1:示例 2:思路中序遍历是递增序列,用变量i记录是第几个元素,利用find记录是否找到结果,来提前终止遍历过程。代码/** * Definition for a b...原创 2020-01-01 23:34:12 · 77 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
236. 二叉树的最近公共祖先题目描述定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:...原创 2020-01-01 22:44:16 · 96 阅读 · 0 评论 -
129. 求根到叶子节点数字之和
129. 求根到叶子节点数字之和题目描述给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。示例 1:示例 2:思路先序遍历的方式算出路上元素的代表的数字,最后算出总和要提前结束判断是...原创 2019-12-31 23:02:10 · 124 阅读 · 0 评论 -
117. 填充每个节点的下一个右侧节点指针 II
117. 填充每个节点的下一个右侧节点指针 II题目描述给定一个二叉树struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。进阶:你只能使...原创 2019-12-30 23:08:34 · 77 阅读 · 0 评论 -
116. 填充每个节点的下一个右侧节点指针
116. 填充每个节点的下一个右侧节点指针题目描述给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状...原创 2019-12-30 21:23:45 · 90 阅读 · 0 评论 -
98. 验证二叉搜索树
98. 验证二叉搜索树题目描述给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:示例 2:思路二叉搜索树中序遍历是递增的序列,因此,中序遍历二叉树,并判断后一个节点是否大于前一个节点,如果大于则返回true,否则返回fa...原创 2019-12-29 23:06:26 · 64 阅读 · 0 评论 -
617. 合并二叉树
617. 合并二叉树题目描述给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:思路对这两棵树同时进行前序遍历,并将对应的节点进行合并。在遍历时,如果两棵树的当前节点均不为空,我们就将它...原创 2019-12-29 21:25:03 · 76 阅读 · 0 评论 -
95. 不同的二叉搜索树 II
95. 不同的二叉搜索树 II题目解析给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。示例:思路所以如果求 1…n 的所有可能。我们只需要把 1 作为根节点,[ ] 空作为左子树,[ 2 … n ] 的所有可能作为右子树。2 作为根节点,[ 1 ] 作为左子树,[ 3…n ] 的所有可能作为右子树。3 作为根节点,[ 1 2 ] 的所有可能作为左子树,[ 4 ...原创 2019-12-28 23:43:56 · 241 阅读 · 0 评论 -
572. 另一个树的子树
572. 另一个树的子树题目描述给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1:给定的树 s:给定的树 t:思路一个树是另一个树的子树则:要么这两个树相等要么这个树是左树的子树要么这个树是右树的子树代码/** * Definitio...原创 2019-12-28 23:03:56 · 68 阅读 · 0 评论