LeetCode-树
学习中的小码农
相信勤能补拙!
展开
-
LeetCode 993. 二叉树的堂兄弟节点
LeetCode 993. 二叉树的堂兄弟节点在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。题解:可以采用层次遍历的方式,在遍历的过程中,记录x和y节点的深度与父节点、。/** * Definiti原创 2021-06-12 11:34:44 · 104 阅读 · 0 评论 -
LeetCode 938. 二叉搜索树的范围和
938. 二叉搜索树的范围和给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。题解:后序遍历二叉树,遇到值在low和high之间的,就加在ans上。下面给出非递归的后序遍历。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * Tre原创 2021-06-11 09:56:51 · 45 阅读 · 0 评论 -
LeetCode 897. 递增顺序搜索树
LeetCode 897. 递增顺序搜索树给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。题解:对于本题而言,可以采用列表保存中序遍历的结果来建树,这样的话需要二外的列表空间。下面的代码采用在中序遍历过程中改变节点指向的方式,优化了空间复杂度。/** * Definition for a binary tree node. * public class TreeNode { * in原创 2021-06-09 10:30:57 · 271 阅读 · 0 评论 -
LeetCode 701. 二叉搜索树中的插入操作
LeetCode 701. 二叉搜索树中的插入操作给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。题解:方法一:递归的方式求解,根据平衡二叉树的性质,比节点小的在左边,比节点大的在右边。/** * Definition for a binary tree node. * pu原创 2021-06-07 12:58:39 · 105 阅读 · 0 评论 -
LeetCode 684. 冗余连接
LeetCode 684. 冗余连接在本问题中, 树指的是一个连通且无环的无向图。输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v] ,满足 u < v,表示连接顶点u 和v的无向图的边。返回一条可以删去的边,使得结果图是一个有着N个节点的树。如果有多个答案,则返回二维数组中最后出现的边。答案边 [u, v] 应满原创 2021-06-06 10:40:20 · 132 阅读 · 0 评论 -
LeetCode 530. 二叉搜索树的最小绝对差
LeetCode 530. 二叉搜索树的最小绝对差给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。题解:因为二叉搜索树的中序遍历是递增序列,因此最小的绝对值之差,一定在中序遍历的顺序中相邻,用pre保存中序遍历顺序中,上一节点的数值。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tre原创 2021-06-05 10:37:30 · 92 阅读 · 0 评论 -
LeetCode 222. 完全二叉树的节点个数
LeetCode 222. 完全二叉树的节点个数给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2^h 个节点。题解:方法一:可以通过遍历的方式求解,时间复杂度为O(n)方法二:由完全二叉树的性质可以得知,最后一层的最左侧节点一定不为空,因此可以设置指针node一直往左走,来计算完全二叉树的层数原创 2021-06-02 10:34:49 · 108 阅读 · 0 评论 -
LeetCode 173. 二叉搜索树迭代器
LeetCode 173. 二叉搜索树迭代器实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器:BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。boolean hasNext() 如果向指针右侧遍历存在数字,则返回 true ;否则返回 false 。int nex原创 2021-05-31 10:24:06 · 123 阅读 · 0 评论 -
LeetCode 145. 二叉树的后序遍历
LeetCode 145. 二叉树的后序遍历给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3]12/3输出: [3,2,1]进阶: 递归算法很简单,你可以通过迭代算法完成吗?题解:方法一:递归求解,后续遍历为先左子树,后右子树,最后访问根节点。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left;原创 2021-05-29 16:20:58 · 65 阅读 · 0 评论 -
LeetCode 144. 二叉树的前序遍历
LeetCode 144. 二叉树的前序遍历给你二叉树的根节点 root ,返回它节点值的 前序 遍历。题解:方法一:递归方式先序遍历为先根然后左子树、右子树。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int原创 2021-05-28 09:27:12 · 99 阅读 · 0 评论 -
LeetCode 129. 求根节点到叶节点数字之和
LeetCode 129. 求根节点到叶节点数字之和给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。每条从根节点到叶节点的路径都代表一个数字:例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。计算从根节点到叶节点生成的 所有数字之和 。叶节点 是指没有子节点的节点。例如:题解:方法一:广度优先搜索。在广搜的过程中,将子节点的值设为当前节点的值*10+子节点的值。遇到叶子节点,就让ans加上叶子节点的修改后的值。/*原创 2021-05-27 10:58:59 · 122 阅读 · 0 评论 -
力扣117. 每个节点的下一个右侧节点指针 II
LeetCode 117. 填充每个节点的下一个右侧节点指针 II给定一个二叉树struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。进阶:你只能使用常量级额外空间。使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。例如:原创 2021-05-26 10:29:47 · 122 阅读 · 0 评论