
Leetcode树
一条特立独行的狗、
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leetcode450. 删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。 说明: 要求算法时间复杂度为 O(h),h 为树的高度。 示例: root = [5,3,6,2,4,null,7] key = 3 5 / \ 3 6 / \ \ 2 4 7 给定需要删除的节点值是 3,所以我们首原创 2020-09-17 10:41:48 · 233 阅读 · 0 评论 -
leetcode429. N叉树的层序遍历
给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。 例如,给定一个 3叉树 : 返回其层序遍历: [ [1], [3,2,4], [5,6] ] 说明:涉及到层次遍历可以用queue(利用队列的先进先出原则)来处理,每处理一层就记录下一层的节点,并删掉当前这层的节点,这样可以保证所有节点都是层次遍历的结果。 /* // Definition for a Node. class Node { public: int val; vector<Node*> ch原创 2020-09-15 17:15:15 · 225 阅读 · 0 评论 -
leetcode404. 左叶子之和
计算给定二叉树的所有左叶子之和。 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 说明:如果一个节点的左子节点不为空,且左子节点没有子节点,则此左子节点一定是左叶子节点。 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNo原创 2020-09-15 17:09:06 · 326 阅读 · 0 评论 -
leetcode257. 二叉树的所有路径
给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 说明:递归遍历二叉树所有的节点,并在遍历的过程中记录当前的节点值,如果到达叶子节点了说明这条路径结束了,插入vector,这样就能得到二叉树的所有路径。 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *原创 2020-09-15 17:03:37 · 168 阅读 · 0 评论 -
leetcode236. 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4] 说明:这里要关注一点就是如果p和q本身具有父子或者祖孙关系的,则直接返回其中的那个父节点或祖先节点,因此要先判断p和q的节点值是不是根节点值,是就直接返回根节点原创 2020-09-15 16:58:18 · 361 阅读 · 0 评论 -
leetcode235. 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5] 示例 1: 输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8 输出: 6 解释: 节点 2 和原创 2020-09-10 17:44:46 · 217 阅读 · 0 评论 -
leetcode230. 二叉搜索树中第K小的元素
给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。 说明: 你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。 示例 1: 输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2 输出:1 示例 2: 输入: root = [3,1,4,null,2], k = 1 5 / \ 3 6 / \ 2 4 / 1 输出:3 备注原创 2020-09-10 12:59:32 · 272 阅读 · 0 评论 -
leetcode226. 翻转二叉树
翻转一棵二叉树。 示例: 输入: 4 / \ 2 7 / \ / \ 1 3 6 9 输出: 4 / \ 7 2 / \ / \ 9 6 3 1 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * Tr原创 2020-09-10 12:50:22 · 115 阅读 · 0 评论 -
leetcode222. 完全二叉树的节点个数
给出一个完全二叉树,求出该树的节点个数。 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。 示例: 输入: 1 / \ 2 3 / \ / 4 5 6 输出: 6 备注:利用完全二叉树的性质来求解,当左子树的高度大于右子树的高度时,则右子树是满二叉树,即可计算出此时右子树的节点总数,然后再递归求出左子树的节点数,反之如果左原创 2020-09-10 12:48:19 · 228 阅读 · 0 评论 -
leetcode199. 二叉树的右视图
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Sol原创 2020-09-02 19:48:16 · 136 阅读 · 0 评论 -
leetcode173. 二叉搜索树迭代器
实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。 调用 next() 将返回二叉搜索树中的下一个最小的数。 BSTIterator iterator = new BSTIterator(root); iterator.next(); // 返回 3 iterator.next(); // 返回 7 iterator.hasNext(); // 返回 true iterator.next(); // 返回 9 iterator.hasNext(); // 返回 true原创 2020-09-02 19:46:12 · 235 阅读 · 0 评论 -
leetcode145. 二叉树的后序遍历(超级通俗易懂的迭代法)
给定一个二叉树,返回它的 后序 遍历。 示例: 输入: [1,null,2,3] 输出: [3,2,1] /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(原创 2020-09-02 19:43:11 · 173 阅读 · 0 评论 -
leetcode144. 二叉树的前序遍历(迭代法)
给定一个二叉树,返回它的 前序 遍历。 示例: 输入: [1,null,2,3] 输出: [1,2,3] /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class S原创 2020-09-02 17:03:11 · 283 阅读 · 0 评论 -
leetcode129. 求根到叶子节点数字之和
给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。 例如,从根到叶子节点路径 1->2->3 代表数字 123。 计算从根到叶子节点生成的所有数字之和。 说明: 叶子节点是指没有子节点的节点。 示例 1: 输入: [1,2,3] 1 / 2 3 输出: 25 解释: 从根到叶子节点路径 1->2 代表数字 12. 从根到叶子节点路径 1->3 代表数字 13. 示例 2: 输入: [4,9,0,5,1] 4 / 9 0 /原创 2020-09-02 16:56:38 · 164 阅读 · 0 评论 -
leetcode116. 填充每个节点的下一个右侧节点指针
给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下: struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有 next 指针都被设置为 NULL。 输入:{“KaTeX parse error: Expected '}', got 'EOF' at end o原创 2020-09-02 16:46:17 · 129 阅读 · 0 评论 -
leetcode114. 二叉树展开为链表
给定一个二叉树,原地将它展开为一个单链表。 例如,给定二叉树 1 / \ 2 5 / \ \ 3 4 6 将其展开为: 1 \ 2 \ 3 \ 4 \ 5 \ 6 思路:可以用一个stack存储右节点,如果左节点存在,将右节点设置为左节点,左节点置位null,然后用递归处理当前的右节点;如果左节点不存在,则取出stack中的栈顶元素设置为右节点,同样地递归处理当前的右节点原创 2020-09-02 16:39:32 · 127 阅读 · 0 评论 -
leetcode113. 路径总和 II
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1 /** * Definition for a binary tree node. * struct TreeNod原创 2020-09-02 15:26:00 · 99 阅读 · 0 评论 -
leetcode112. 路径总和
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1 /** * Definition for a binary tree node. * str原创 2020-09-02 15:15:21 · 118 阅读 · 0 评论 -
leetcode111. 二叉树的最小深度
给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 递归法求解: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left;原创 2020-09-02 15:03:08 · 97 阅读 · 0 评论 -
leetcode110. 平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回 true 。 示例 2: 给定二叉树 [1,2,2,3,3,null,null,4,原创 2020-08-20 11:31:34 · 122 阅读 · 0 评论 -
leetcode108. 将有序数组转换为二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5 /** * Definition for a binary tree node.原创 2020-08-20 11:26:31 · 111 阅读 · 0 评论 -
leetcode107. 二叉树的层次遍历 II
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其自底向上的层次遍历为: [ [15,7], [9,20], [3] ] /** * Definition for a bi原创 2020-08-20 11:22:29 · 105 阅读 · 0 评论 -
leetcode104. 二叉树的最大深度
给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3 。 /** * Definition for a binary tree node. * struct TreeNode { * int val; *原创 2020-08-20 11:19:51 · 120 阅读 · 0 评论 -
leetcode103. 二叉树的锯齿形层次遍历
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回锯齿形层次遍历如下: [ [3], [20,9], [15,7] ] /** * Definition for a binary tree node. * struct TreeNode { * int val原创 2020-08-20 11:17:50 · 117 阅读 · 0 评论 -
leetcode101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [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 /** * Definition for a binary tree node. * struct Tre原创 2020-08-20 11:14:53 · 150 阅读 · 0 评论 -
leetcode100. 相同的树
给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入: 1 1 / \ / 2 3 2 3 [1,2,3], [1,2,3] 输出: true 示例 2: 输入: 1 1 / 2 2 [1,2], [1,null,2] 输出: false /** * De原创 2020-08-20 11:10:41 · 97 阅读 · 0 评论 -
leetcode98. 验证二叉搜索树
难度中等729给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入: 2 / 1 3 输出: true 示例 2: 输入: 5 / 1 4 / 3 6 输出: false 解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5 ,但是其右子节点值为 4 。 /** * Definition f原创 2020-08-20 11:06:56 · 210 阅读 · 0 评论 -
leetcode94.二叉树的中序遍历(迭代法)
给定一个二叉树,返回它的中序 遍历。 示例: 输入: [1,null,2,3] 1 2 / 3 输出: [1,3,2] /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class So原创 2020-08-20 10:49:18 · 127 阅读 · 0 评论 -
leetcode102. 二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例: 二叉树:[3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 其层次遍历结果: [ [3], [9,20], [15,7] ] 思路:可用队列实现这个问题,每一层的节点存储在队列中,然后获取节点值之后判断该节点是否有左右子节点,有就保存,保存完之后需要删除该节点,需要用一个循环来控制该层节点是原创 2020-06-10 19:17:11 · 319 阅读 · 0 评论