
树
AAS48
一起学算法
展开
-
6182. 反转二叉树的奇数层(层次遍历)
例如,假设第 3 层的节点值是 [2,1,3,4,7,11,29,18] ,那么反转后它应该变成 [18,29,11,7,4,3,1,2]。用层次遍历,拿到每一层的序列。然后把奇数层用链表串起来,将问题转化为逆置链表即可。可以直接在树上进行修改。给你一棵 完美 二叉树的根节点 root ,请你反转这棵树中每个 奇数 层的节点值。完美 二叉树需满足:二叉树的所有父节点都有两个子节点,且所有叶子节点都在同一层。节点的 层数 等于该节点到根节点之间的边数。反转后,返回树的根节点。原创 2022-09-18 12:01:46 · 383 阅读 · 0 评论 -
250. 统计同值子树(二叉树)
遍历每个节点,看每个节点形成的树是否都是同值的。如果是,就res++即可。给定一个二叉树,统计该二叉树数值相同的子树个数。同值子树是指该子树的所有节点都拥有相同的数值。原创 2022-09-17 13:06:33 · 658 阅读 · 0 评论 -
剑指 Offer II 043. 往完全二叉树添加节点(层次遍历)
CBTInserter.insert(int v) 向树中插入一个新节点,节点类型为 TreeNode,值为 v。使树保持完全二叉树的状态,并返回插入的新节点的父节点的值;完全二叉树是每一层(除最后一层外)都是完全填充(即,节点数达到最大,第 n 层有 2n-1 个节点)的,并且所有的节点都尽可能地集中在左侧。CBTInserter(TreeNode root) 使用根节点为 root 的给定树初始化该数据结构;CBTInserter.get_root() 将返回树的根节点。这样找父亲的话会非常方便。原创 2022-09-11 12:42:43 · 333 阅读 · 0 评论 -
Leetcode 669. 修剪二叉搜索树
给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。可以证明,存在 唯一的答案。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。递归即可,不用想复杂了。原创 2022-09-10 14:42:21 · 94 阅读 · 0 评论 -
Leetcode 894. 所有可能的真二叉树(较难的DP,代码量大)
给你一个整数 n ,请你找出所有可能含 n 个节点的 真二叉树 ,并以列表形式返回。答案中每棵树的每个节点都必须符合 Node.val == 0。比如dp[7]的所有情况都是建立在dp[5]的基础上的。因为在所有n=5的子树下面找叶子节点挂两个节点,就变成n=7的一个解了。答案的每个元素都是一棵真二叉树的根节点。你可以按 任意顺序 返回最终的真二叉树列表。真二叉树 是一类二叉树,树中每个节点恰好有 0 或 2 个子节点。但是思路其实不算很难,偶数时肯定没有,主要是奇数情况。所谓重复指的是,结构相同的树。原创 2022-09-08 19:25:34 · 236 阅读 · 0 评论 -
Leetcode 剑指 Offer II 063. 替换单词 (字典前缀树模板修改)
在英语中,有一个叫做 词根(root) 的概念,它可以跟着其他一些词组成另一个较长的单词——我们称这个词为 继承词(successor)。例如,词根an,跟随着单词 other(其他),可以形成新的单词 another(另一个)。注意:在建立词根的时候,要在单词末尾加一步,设置一个dicFin的布尔值,表示这里是词根的结束。现在,给定一个由许多词根组成的词典和一个句子,需要将句子中的所有继承词用词根替换掉。如果继承词有许多可以形成它的词根,则用最短的词根替换它。搜索过程中,如果看到dicFin直接返回。原创 2022-09-04 14:00:34 · 236 阅读 · 0 评论 -
Leetcode 1261. 在受污染的二叉树中查找元素(简单递归)
【代码】Leetcode 1261. 在受污染的二叉树中查找元素(简单递归)原创 2022-09-02 16:13:39 · 226 阅读 · 0 评论 -
Leetcode 208. 实现 Trie (字典前缀树)
boolean startsWith(String prefix) 如果之前已经插入的字符串 word 的前缀之一为 prefix ,返回 true;Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);void insert(String word) 向前缀树中插入字符串 word。Trie() 初始化前缀树对象。原创 2022-08-25 13:10:31 · 93 阅读 · 0 评论 -
Leetcode 124. 二叉树中的最大路径和 (困难)
好了,分析上述6种情况, 只有 2,3,4 可以向上累加,而1,5,6不可以累加(这个很好想,情况1向上累加的话,必然出现分叉,情况5和6直接就跟上面的树枝断开的,没法累加),所以我们找一个全局变量存储 1,5,6这三种不可累加的最大值, 另一方面咱们用遍历树的方法求2,3,4这三种可以累加的情况。路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径 至少包含一个 节点,且不一定经过根节点。解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6。.原创 2022-08-09 19:23:44 · 125 阅读 · 0 评论 -
Leetcode 606. 根据二叉树创建字符串 (javascript)
解释:初步转化后得到 “1(2(4)())(3()())” ,但省略所有不必要的空括号对后,字符串应该是"1(2(4))(3)"。对每一个节点,都是他自己 node.val ( f(node.left) ) ( f(node.right) )的递归结构。空节点使用一对空括号对 “()” 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。输入:root = [1,2,3,null,4]输出:“1(2()(4))(3)”输出:“1(2(4))(3)”所以就出现了重叠子问题。...原创 2022-08-09 18:33:47 · 117 阅读 · 0 评论 -
Leetcode 623. 在二叉树中增加一行
如果 depth == 1 意味着 depth - 1 根本没有深度,那么创建一个树节点,值 val 作为整个原始树的新根,而原始树就是新根的左子树。输入: root = [4,2,null,3,1], val = 1, depth = 3。输入: root = [4,2,6,3,1,5], val = 1, depth = 2。输出: [4,2,null,1,1,3,null,null,1]输出: [4,1,1,2,null,null,6,3,1,5]cur 原来的左子树应该是新的左子树根的左子树。..原创 2022-08-08 18:26:53 · 208 阅读 · 0 评论 -
Leetcode 236. 二叉树的最近公共祖先
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大。遍历每个节点,判断该节点是否同时有a,b两个子节点。最后取出栈中最上面的一个节点,即为最近的公共祖先。如果是一次查询,那么解法还是比较多的,例如两次搜索、递归、后续遍历等。输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1。解释:节点 5 和节点 1 的最近公共祖先是节点 3。...原创 2022-08-08 17:54:28 · 392 阅读 · 0 评论 -
Leetcode 515. 在每个树行中找最大值
给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。用一个hashmap,记录每一层的最大值。如果有更大的就更新。输入: root = [1,3,2,5,3,null,9]输出: [1,3,9]原创 2022-08-08 17:21:57 · 91 阅读 · 0 评论 -
Leetcode 513. 找树左下角的值
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。输入: [1,2,3,4,null,5,6,null,null,7]根据最左边,想到肯定利用先序遍历的思想。题目要求找最下面、最左边的一个节点。根据最下面,想到肯定要先求树的高度。假设二叉树中至少有一个节点。...原创 2022-08-08 17:07:20 · 86 阅读 · 0 评论 -
LeetCode: 对称二叉树(树的递归)
【问题描述:】对称二叉树给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [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【思路】:刚看这道题...原创 2019-08-09 18:29:11 · 150 阅读 · 0 评论 -
LeetCode606.根据二叉树创建字符串(递归)
你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。示例 1:输入: 二叉树: [1,2,3,4] 1 / \ 2 3 / 4 输出: "1(2(4))(3)"解释: 原本将是“1...原创 2019-07-10 15:46:52 · 367 阅读 · 0 评论 -
653. 两数之和 IV - 输入 BST(二分查找)
给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。案例 1:输入: 5 / \ 3 6 / \ \2 4 7Target = 9输出: True 案例 2:输入: 5 / \ 3 6 / \ \2 4 7Target = 28输...原创 2019-07-10 15:21:48 · 189 阅读 · 0 评论 -
LeetCode,897. 递增顺序查找树(二叉搜索树)
给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。示例 :输入:[5,3,6,2,4,null,8,1,null,null,null,7,9] 5 / \ 3 6 / \ \ 2 4 8 / / \ 1 7 9输出:[1,nul...原创 2019-07-10 12:17:57 · 477 阅读 · 0 评论 -
天梯赛习题:树的遍历(后序中序建树,分治思想,注意细节)
L2-006 树的遍历 (25 分)给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:72 3 1 ...原创 2019-03-15 17:49:32 · 907 阅读 · 1 评论