
二叉树
XIIV13
这个作者很懒,什么都没留下…
展开
-
LeetCode刷题笔记 面试题 04.06. 后继者
题目描述设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。如果指定节点没有对应的“下一个”节点,则返回null。示例:输入: root = [5,3,6,2,4,null,null,1], p = 4输出: 5Sample Codeclass Solution { public TreeNode inorderSuccessor(TreeNode ro...原创 2020-03-28 00:28:44 · 397 阅读 · 0 评论 -
LeetCode刷题笔记 116. 填充每个节点的下一个右侧节点指针
题目描述给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NU...原创 2020-03-27 23:21:35 · 227 阅读 · 0 评论 -
LeetCode刷题笔记 1110. 删点成林
题目描述给出二叉树的根节点 root,树上每个节点都有一个不同的值。如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。返回森林中的每棵树。你可以按任意顺序组织答案。示例:输入:root = [1,2,3,4,5,6,7], to_delete = [3,5]输出:[[1,2,null,4],[6],[7]]Sample...原创 2020-03-26 23:42:50 · 259 阅读 · 0 评论 -
LeetCode刷题笔记 114. 二叉树展开为链表
题目描述给定一个二叉树,原地将它展开为链表。Sample Code (后序遍历)class Solution { private TreeNode node; public void flatten(TreeNode root) { if(root == null) return; flatten(root.right); flatten(root.left); root...原创 2019-10-22 09:52:36 · 214 阅读 · 0 评论 -
LeetCode刷题笔记 513. 找树左下角的值
题目描述给定一个二叉树,在树的最后一行找到最左边的值。Sample Code 1class Solution { private int res; private int max = Integer.MIN_VALUE; public int findBottomLeftValue(TreeNode root) { dfs(root, 0); ...原创 2019-10-21 17:17:57 · 268 阅读 · 0 评论 -
LeetCode刷题笔记 894. 所有可能的满二叉树
题目描述满二叉树是一类二叉树,其中每个结点恰好有 0 或 2 个子结点。返回包含 N 个结点的所有可能满二叉树的列表。 答案的每个元素都是一个可能树的根结点。答案中每个树的每个结点都必须有 node.val=0。你可以按任何顺序返回树的最终列表。示例:输入:7输出:[[0,0,0,null,null,0,0,null,null,0,0],[0,0,0,null,null,0,0,0,...原创 2019-10-21 16:58:18 · 174 阅读 · 0 评论 -
LeetCode刷题笔记 687. 最长同值路径
题目描述给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。注意:两个节点之间的路径长度由它们之间的边数表示。Sample Code先分别计算当前节点的左右同值路径的长度,更新 总最长同值路径,然后把左右子树之一返回给上一层(如果和上一层同值的话)class Solution { private int maxLen = 0; ...原创 2019-10-21 16:18:35 · 222 阅读 · 0 评论 -
LeetCode刷题笔记 105&106.从遍历序列构造二叉树 *
总结在二叉树任一节点都可以看成 根,左子树,右子树 三个部分,不管什么遍历方法,这三部分在遍历数组中的长度都是一样长的(这不是废话吗?)。所以 分治 + 递归 就可以“轻松”的解决了。代码实现上大概有三种方法:递归传递 边界,长度递归传递 两个新的数组用map来记录坐标信息105.从前序与后序遍历序列构造二叉树总结Sample & Demo Codeclass S...原创 2019-10-04 17:06:37 · 199 阅读 · 0 评论 -
LeetCode刷题笔记 95. 不同的二叉搜索树 II *
题目描述给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。总结SDC1:递归SDC2:动态规划,同时还用了同构。值得注意的是,所有的左子树我们没有 clone ,也就是很多子树被共享了,在内存中就会是下边的样子。也就是左子树用的都是之前的子树,没有开辟新的空间。SDC3:动态规划仔细分析,可以发现一个规律。首先我们每次新增加的数字大于之前的所有数字,所以新增加的...原创 2019-10-03 17:38:25 · 240 阅读 · 0 评论 -
LeetCode刷题笔记 96. 不同的二叉搜索树
题目描述给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?总结SDC1动态规划:G(n) 是我们解决问题需要的函数。G(n) 可以从F(i,n) 得到,而 F(i,n) 又会递归的依赖于G(n)。首先,根据上一节中的思路,不同的二叉搜索树的总数 G(n)G(n),是对遍历所有 i (1 <= i <= n) 的 F(i, n)F(i,n) 之和。换而言...原创 2019-10-03 11:48:02 · 217 阅读 · 0 评论 -
LeetCode刷题笔记 102. 二叉树的层次遍历
题目描述给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。Sample & Demo Code(递归,DFS)class Solution { List<List<Integer>> res = new ArrayList<>(); public List<List<Integer>&...原创 2019-10-03 10:41:47 · 234 阅读 · 0 评论 -
LeetCode刷题笔记 98. 验证二叉搜索树*
题目描述给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。总结需要注意 非边界节点需要满足两个条件,大于父节点,小于祖父节点,或者小于父节点,大于祖父节点SDC值得好好看看SDC2把搜索二叉树用中序转换为数组,遍历判断就行了Sampl...原创 2019-10-02 17:08:38 · 218 阅读 · 0 评论 -
LeetCode刷题笔记 235. 二叉搜索树的最近公共祖先
总结利用二叉树的特性,自己没能学以致用Sample Codeclass Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if (p.val <root.val && q.val < root.val) { ...原创 2019-10-01 13:08:40 · 120 阅读 · 0 评论