随笔分类 - 树相关
摘要:题目来源 572. 另一棵树的子树 题目详情 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节
阅读全文
摘要:题目来源 662. 二叉树最大宽度 题目详情 给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与**满二叉树(full binary tree)**结构相同,但一些节点为空。 每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也
阅读全文
摘要:题目来源 297. 二叉树的序列化与反序列化 题目详情 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。 请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 /
阅读全文
摘要:题目来源 208. 实现 Trie (前缀树) 题目详情 Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。 请你实现 Trie 类: Trie() 初始化前缀树对象。 void ins
阅读全文
摘要:题目来源 96. 不同的二叉搜索树 题目详情 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入: n = 3 输出: 5 示例 2: 输入: n = 1 输出: 1 提示: 1 <= n <= 19
阅读全文
摘要:题目来源 538. 把二叉搜索树转换为累加树 题目详情 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下,二叉搜索树满足下列约束条件: 节点的左子树仅包
阅读全文
摘要:题目来源 437. 路径总和 III 题目详情 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。 示例 1:
阅读全文
摘要:题目来源 LeetCode_226 题目描述 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入: root = [4,2,7,1,3,6,9] 输出: [4,7,2,9,6,3,1] 示例 2: 输入: root = [2,1,3] 输出: [2,3,1] 示例
阅读全文
摘要:105. 从前序与中序遍历序列构造二叉树 LeetCode_105 题目描述 解法描述 题目主要考察的是我们对二叉树三种遍历的熟悉程度。 构建二叉树的时候首先可以根据前序遍历找出根节点,接着根据根节点在中序遍历找到划分左右子树的分界点。 然后新建一个树结点,递归构建其左右子树。 代码描述 /** *
阅读全文
摘要:题目来源 LeetCode_124 题目描述 题解描述 解法一:树形DP 解法二:后序遍历 我们在这里需要仔细考虑一下,怎样的路径是合法的?换句话说,树上的路径可以怎样构成? 按照题意分析,我们的单边路径一定是合法的,而对于当前节点而言,左半边路径加上当前节点再加上右单边节点也是合法的。 我们可以定
阅读全文
摘要:144. 二叉树的前序遍历 LeetCode_144 题目描述 方法一:递归法 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode righ
阅读全文
摘要:543. 二叉树的直径 LeetCode_543 题目描述 代码实现 代码撰写的时候需要注意的是left+right+1会多算一个结点。 在返回最终答案的时候需要减去一个结点(树的高度决定的)。 /** * Definition for a binary tree node. * public cl
阅读全文
摘要:113. 路径总和 II LeetCode_113 题目描述 解法一:低效率的递归回溯 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode
阅读全文
摘要:110. 平衡二叉树 LeetCode_110 题目描述 题解分析 本题可以和求树的高度的实现联系起来。 只有左右子树的高度都求出来才能知道是否是平衡的。 本题的一个难点是如果有一个结点不是平衡的怎么办?解决方案是返回一个负数。以后只要遇到负数就返回负数。 答案就是判断返回的数是否为负数,如果为负数
阅读全文
摘要:199. 二叉树的右视图 LeetCode_199 题目描述 方法一:使用宽度优先搜索(类似于层次遍历,每次记录最后一个元素) /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNo
阅读全文
摘要:102. 二叉树的层序遍历 LeetCode_102 题目描述 题解分析 二叉树的层序遍历需要使用队列来实现,在java中,可以使用LinkedList来实现队列。 因为需要按层输出二叉树的每一层结点,我们可以每次都将队列中的元素全部出列,这些出列的元素就是一层的元素。 在for循环中还需要将下一层
阅读全文
摘要:236. 二叉树的最近公共祖先 题目描述 相似题目:https://www.cnblogs.com/GarrettWale/p/14406641.html 题解分析 此题是利用二叉树的后序遍历来求解最近公共祖先。 递归的出口是遍历到叶子结点或者当前结点(root)等于待搜索的结点(p或者q),此时需
阅读全文
摘要:958. 二叉树的完全性检验 LeetCode_958 题目描述 题解分析 题目的关键是判断每一层的结点数是否等于2^i。 此外,还有一个比较关键的因素是判断最后一层的结点是否是偏左的。 以上这两点都可以通过给每个结点设置一个序号,也就是按照二叉树的顺序存储的方式分配序号,如果最后一个结点的序号和所
阅读全文
摘要:103. 二叉树的锯齿形层序遍历 LeetCode_103 相似题型:剑指 Offer 32 - III. 从上到下打印二叉树 III 题目描述 LinkedList(Deque的一个实现类)的用法 增加: add(E e):在链表后添加一个元素; 通用方法 addFirst(E e):在链表头部插
阅读全文
摘要:94. 二叉树的中序遍历 LeetCode_94 题目描述 解法一:递归解法 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right
阅读全文