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 · 199 阅读 · 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 · 181 阅读 · 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 · 258 阅读 · 0 评论 -
leetcode257. 二叉树的所有路径
给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。说明:递归遍历二叉树所有的节点,并在遍历的过程中记录当前的节点值,如果到达叶子节点了说明这条路径结束了,插入vector,这样就能得到二叉树的所有路径。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *原创 2020-09-15 17:03:37 · 153 阅读 · 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 · 320 阅读 · 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 · 174 阅读 · 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 · 217 阅读 · 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 · 95 阅读 · 0 评论 -
leetcode222. 完全二叉树的节点个数
给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。示例:输入: 1 / \ 2 3 / \ /4 5 6输出: 6备注:利用完全二叉树的性质来求解,当左子树的高度大于右子树的高度时,则右子树是满二叉树,即可计算出此时右子树的节点总数,然后再递归求出左子树的节点数,反之如果左原创 2020-09-10 12:48:19 · 200 阅读 · 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 · 121 阅读 · 0 评论 -
leetcode173. 二叉搜索树迭代器
实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用 next() 将返回二叉搜索树中的下一个最小的数。BSTIterator iterator = new BSTIterator(root);iterator.next(); // 返回 3iterator.next(); // 返回 7iterator.hasNext(); // 返回 trueiterator.next(); // 返回 9iterator.hasNext(); // 返回 true原创 2020-09-02 19:46:12 · 191 阅读 · 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 · 148 阅读 · 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 · 232 阅读 · 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 · 130 阅读 · 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 · 107 阅读 · 0 评论 -
leetcode114. 二叉树展开为链表
给定一个二叉树,原地将它展开为一个单链表。例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5 \ 6思路:可以用一个stack存储右节点,如果左节点存在,将右节点设置为左节点,左节点置位null,然后用递归处理当前的右节点;如果左节点不存在,则取出stack中的栈顶元素设置为右节点,同样地递归处理当前的右节点原创 2020-09-02 16:39:32 · 83 阅读 · 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 · 78 阅读 · 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 · 100 阅读 · 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 · 74 阅读 · 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 · 98 阅读 · 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 · 98 阅读 · 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 · 87 阅读 · 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 · 89 阅读 · 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 · 94 阅读 · 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 · 133 阅读 · 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 · 83 阅读 · 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 · 165 阅读 · 0 评论 -
leetcode94.二叉树的中序遍历(迭代法)
给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]12/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 · 101 阅读 · 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 · 282 阅读 · 0 评论