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 · 161 阅读 · 0 评论 -
PigyChan_LeetCode 654. 最大二叉树
654. 最大二叉树难度中等给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:(1)二叉树的根是数组中的最大元素。(2)左子树是通过数组中最大值左边部分构造出的最大二叉树。(3)右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。示例 :提示:(1)给定的数组的大小在 [1, 1000] 之间。思路1.0:(1)创建一个结构体存储数组arr中元素的值和下标,再将其按值大小降序排序,这个问题就变成了向一个二叉搜索原创 2020-10-30 09:41:59 · 163 阅读 · 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 · 99 阅读 · 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 · 115 阅读 · 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 · 239 阅读 · 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 · 65 阅读 · 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 · 112 阅读 · 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 · 65 阅读 · 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 · 113 阅读 · 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 · 102 阅读 · 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 · 160 阅读 · 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 · 109 阅读 · 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 · 88 阅读 · 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 · 70 阅读 · 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 · 101 阅读 · 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 · 77 阅读 · 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 · 74 阅读 · 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 · 89 阅读 · 0 评论