LeetCode二叉树
PigyChan
谢谢你看我的博客
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
PigyChan_LeetCode 面试题 04.03. 特定深度节点链表
面试题 04.03. 特定深度节点链表 难度中等 给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。 示例: 思路1.0: (1)这不就是层次遍历嘛。 (2)创建一个队列Que,配合变量len来判断处于当前层的节点有哪些。 代码1.0: /** * Definition for a binary tree node. * struct TreeNode { * int val; * Tre原创 2020-10-26 10:07:09 · 217 阅读 · 0 评论 -
PigyChan_LeetCode 654. 最大二叉树
654. 最大二叉树 难度中等 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: (1)二叉树的根是数组中的最大元素。 (2)左子树是通过数组中最大值左边部分构造出的最大二叉树。 (3)右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大二叉树,并且输出这个树的根节点。 示例 : 提示: (1)给定的数组的大小在 [1, 1000] 之间。 思路1.0: (1)创建一个结构体存储数组arr中元素的值和下标,再将其按值大小降序排序,这个问题就变成了向一个二叉搜索原创 2020-10-30 09:41:59 · 205 阅读 · 0 评论 -
PigyChan_LeetCode 998. 最大二叉树 II
998. 最大二叉树 II 难度中等 最大树定义:一个树,其中每个节点的值都大于其子树中的任何其他值。 给出最大树的根节点 root。 就像之前的问题那样,给定的树是从表 A(root = Construct(A))递归地使用下述 Construct(A) 例程构造的: (1)如果 A 为空,返回 null (2)否则,令 A[i] 作为 A 的最大元素。创建一个值为 A[i] 的根节点 root (3)root 的左子树将被构建为 Construct([A[0], A[1], …, A[i-1]]) (4原创 2020-10-25 18:50:31 · 149 阅读 · 0 评论 -
PigyChan_LeetCode 94. 二叉树的中序遍历
94. 二叉树的中序遍历 难度中等 给定一个二叉树,返回它的中序 遍历。 示例: 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 思路1.0: 利用栈,当前节点没有左子树时,打印nodeNow->val;有左子树时,压入nodeNow和nodeNow->left;用continue控制:左子树处理完时才会去处理右子树。 代码1.0: class Solution { public: vector<int> inorderTraversal(TreeNode* root)原创 2020-10-25 18:50:24 · 179 阅读 · 0 评论 -
PigyChan_LeetCode 1530. 好叶子节点对的数量
1530. 好叶子节点对的数量 难度中等 给你二叉树的根节点 root 和一个整数 distance 。 如果二叉树中两个 叶 节点之间的 最短路径长度 小于或者等于 distance ,那它们就可以构成一组 好叶子节点对 。 返回树中 好叶子节点对的数量 。 示例 1: 输入:root = [1,2,3,null,4], distance = 3 输出:1 解释:树的叶节点是 3 和 4 ,它们之间的最短路径的长度是 3 。这是唯一的好叶子节点对。 示例 2: 输入:root = [1,2,3,4,5原创 2020-10-25 18:50:15 · 296 阅读 · 0 评论 -
PigyChan_LeetCode 222. 完全二叉树的节点个数
222. 完全二叉树的节点个数 难度中等 给出一个完全二叉树,求出该树的节点个数。 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。 示例: 思路1.0: 不是随便哪个遍历都行嘛。。 代码: class Solution { public: void PreOrder(TreeNode* Tnode, int& rst)原创 2020-10-25 18:49:58 · 117 阅读 · 0 评论 -
PigyChan_LeetCode 剑指 Offer 26. 树的子结构
剑指 Offer 26. 树的子结构 难度中等 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A: 给定的树 B: 返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。 示例 1: 输入:A = [1,2,3], B = [3,1] 输出:false 示例 2: 输入:A = [3,4,5,1,2], B = [4,1] 输出:true 限制: 0 <= 节点个数 <原创 2020-10-25 18:49:48 · 169 阅读 · 0 评论 -
PigyChan_LeetCode 101. 对称二叉树
101. 对称二叉树 难度简单 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 思路1.0: 匹配类二叉树的套路 从根节点的左右子树两处开始向下遍历。两处遍历的顺序相反,诸如2->left,2->right 两处对称的判断条件有: 1)元素相等 2)同时碰到空子树 代码1.0(已完成): class Solution { public: boo原创 2020-10-25 18:49:40 · 108 阅读 · 0 评论 -
PigyChan_LeetCode 1367. 二叉树中的列表
1367. 二叉树中的列表 难度中等 给你一棵以 root 为根的二叉树和一个 head 为第一个节点的链表。 如果在二叉树中,存在一条一直向下的路径,且每个点的数值恰好一一对应以 head 为首的链表中每个节点的值,那么请你返回 True ,否则返回 False 。 一直向下的路径的意思是:从树中某个节点开始,一直连续向下的路径。 示例 1: 输入:head = [4,2,8], root = [1,4,4,null,2,2,null,1,null,6,8,null,null,null,null,1,3原创 2020-10-25 18:49:31 · 154 阅读 · 0 评论 -
PigyChan_LeetCode 572. 另一个树的子树
572. 另一个树的子树 难度简单 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。 示例 1: 给定的树 s: 给定的树 t: 返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。 示例 2: 给定的树 s: 给定的树 t: 返回 false。 思路1.0: 类匹配二叉树套路 两层遍历,第一层在树S中找到树t的根,第二层判断上一步找到的节点是否和树t匹配原创 2020-10-25 18:49:24 · 148 阅读 · 0 评论 -
PigyChan_LeetCode 814. 二叉树剪枝
814. 二叉树剪枝 难度中等 给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。 返回移除了所有不包含 1 的子树的原二叉树。 ( 节点 X 的子树为 X 本身,以及所有 X 的后代。) 示例1:输入: [1,null,0,0,1] 输出: [1,null,0,null,1] 解释: 只有红色节点满足条件“所有不包含 1 的子树”。 右图为返回的答案。 示例2:输入: [1,0,1,0,0,0,1] 输出: [1,null,1,null,1] 示例3:输入: [1,1,0,1,原创 2020-10-25 18:49:10 · 233 阅读 · 0 评论 -
PigyChan_LeetCode 面试题 04.05. 合法二叉搜索树
面试题 04.05. 合法二叉搜索树 难度中等 实现一个函数,检查一棵二叉树是否为二叉搜索树。 示例 1: 示例 2: 思路1.0: 遍历树,查看每个节点是不是都符合“左子树小,右子树大”的条件。 判断是否是搜索二叉树节点的几种情况: 1)左子树节点值小于当前节点值,右子树节点值大于当前节点值 2)只存在左子树,且其节点值小于当前节点值 2)只存在右子树,且其节点值大于当前节点值 3)没有子树 代码1.0: class Solution { public: bool isMatchi原创 2020-10-25 18:49:17 · 165 阅读 · 0 评论 -
PigyChan_LeetCode 865. 具有所有最深结点的最小子树
865. 具有所有最深结点的最小子树 难度中等 给定一个根为 root 的二叉树,每个结点的深度是它到根的最短距离。 如果一个结点在整个树的任意结点之间具有最大的深度,则该结点是最深的。 一个结点的子树是该结点加上它的所有后代的集合。 返回能满足“以该结点为根的子树中包含所有最深的结点”这一条件的具有最大深度的结点。 示例: 输入:[3,5,1,6,2,0,8,null,null,7,4] 输出:[2,7,4] 解释: 我们返回值为 2 的结点,在图中用黄色标记。 在图中用蓝色标记的是树的最深的结点。 输入原创 2020-10-24 10:29:09 · 126 阅读 · 0 评论 -
PigyChan_LeetCode 面试题 04.12. 求和路径
面试题 04.12. 求和路径 难度中等 给定一棵二叉树,其中每个节点都含有一个整数数值(该值或正或负)。设计一个算法,打印节点数值总和等于某个给定值的所有路径的数量。注意,路径不一定非得从二叉树的根节点或叶节点开始或结束,但是其方向必须向下(只能从父节点指向子节点方向)。 示例: 给定如下二叉树,以及目标和 sum = 22, 返回: 3 解释:和为 22 的路径有:[5,4,11,2], [5,8,4,5], [4,11,7] 提示: (1)节点总数 <= 10000 思路1.0: 暴力求解,原创 2020-10-24 10:28:45 · 122 阅读 · 0 评论 -
PigyChan_LeetCode 1110. 删点成林
1110. 删点成林 难度中等 给出二叉树的根节点 root,树上每个节点都有一个不同的值。 如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。 返回森林中的每棵树。你可以按任意顺序组织答案。 示例: 输入:root = [1,2,3,4,5,6,7], to_delete = [3,5] 输出:[[1,2,null,4],[6],[7]] 提示: (1)树中的节点数最大为 1000。 (2)每个节点都有一个介于 1 到 1000 之间的值,原创 2020-10-24 10:28:22 · 164 阅读 · 0 评论 -
PigyChan_LeetCode 96. 不同的二叉搜索树
96. 不同的二叉搜索树 难度中等 给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种? 示例: 思路1.0: 设dp[n]为前n个数能组成的搜索二叉树个数,numm为 以第m个节点为根节点时能产生的搜索二叉树个数。 然后通过观察几组例子发现: 对其中几个点加以解释: 1){1,2,3}和{2,3,4}这两个连续数列所能生成的搜索二叉树数量相同,都是5即dp[3] 2)以上观察结果可把节点分为两类 (1)两端节点:num[1]==dp[n-1],num[n]==dp[n-1] (2)中间原创 2020-10-24 10:28:06 · 116 阅读 · 0 评论 -
PigyChan_LeetCode 105. 从前序与中序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树 难度中等 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 思路1.0: (1)遍历前序序列,并在每次遍历时在中序序列中找到当前访问值。 (2)设置队列,用以辅助我们一层一层地构造二叉树 思路2.0(已看题解): (1)遍历前序序列,并在每次遍历时在中序序列中找到当前访问值的下标mi原创 2020-10-24 10:27:40 · 116 阅读 · 0 评论 -
PigyChan_LeetCode 114. 二叉树展开为链表
114. 二叉树展开为链表 难度中等 给定一个二叉树,原地将它展开为一个单链表。 例如,给定二叉树 将其展开为: 思路1.0(已看题解): 如果当前节点有左子树,就把左子树拿出接在右子树位置处,原右子树再接在新生成的树最右叶节点的右子树处,如下图: 代码1.0(已完成): class Solution { public: void flatten(TreeNode* root) { while (root != NULL) {原创 2020-10-24 10:27:23 · 138 阅读 · 0 评论
分享