
二叉树合集
二叉树总结
斌同学斌同學
长路漫漫,乞相伴而行啊
展开
-
(二叉树)538. 把二叉搜索树转换为累加树
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。题解思路二叉搜索树的中序遍历的反序是一个降序数组,因此只需用一个sum记录到当前节点为止的所有数组和,并把这个值更新到二叉树的root节点即可,这样每个节点存的值就是原来节点值加上所有大于它节点的值之和实现代码class Solution { int sum = 0; public TreeNode convertBS原创 2020-09-09 19:15:17 · 208 阅读 · 0 评论 -
(二叉树)617. 合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。注意: 合并必须从两个树的根节点开始。题解思路在遍历时,如果两棵树的当前节点均不为空,我们就将它们的值进行相加,并对它们的左孩子和右孩子进行递归合并;如果其中有一棵树为空,那么我们返回另一颗树作为结果;如果两棵树均为空,此时返回任意一棵树均可(因为都是空)实原创 2020-09-08 12:08:19 · 266 阅读 · 0 评论 -
(二叉树)剑指 Offer 27. 二叉树的镜像
请完成一个函数,输入一个二叉树,该函数输出它的镜像。示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]题解思路终止条件: 当节点 root为空时(即越过叶节点),则返回 null ;递推工作:初始化节点 tmp ,用于暂存 root 的左子节点;开启递归 右子节点 mirrorTree(root.right) ,并将返回值作为 root 的 左子节点 。开启递归 左子节点 mirrorTree(tmp) ,并将返回值作为 root 的 右子节原创 2020-09-05 23:07:41 · 114 阅读 · 0 评论 -
(二叉树)226. 翻转二叉树
翻转一棵二叉树。题解思路其实就是交换一下左右节点,然后再递归的交换左节点,右节点根据动画图我们可以总结出递归的两个条件如下:终止条件:当前节点为null时返回交换当前节点的左右节点,再递归的交换当前节点的左节点,递归的交换当前节点的右节点实现代码class Solution { public TreeNode invertTree(TreeNode root) { //递归函数的终止条件,节点为空时返回 if(root==null) { return null; } /原创 2020-09-05 22:59:32 · 135 阅读 · 0 评论 -
(二叉树)剑指 Offer 28. 对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:root = [1,2,2,null,3,null,3]输出:false题解思路如果两颗树的根都为空,返回true如果一颗为空另一颗不为空返回false如果两颗都不为空原创 2020-09-05 22:52:44 · 119 阅读 · 0 评论 -
(二叉树)11. 一颗二叉树是否是二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:示例 2:题解思路中序遍历时,判断当前节点是否大于中序遍历的前一个节点,如果大于,说明满足 BST,继续遍历;否则直接返回 false实现代码class Solution { int pre = Integer.MIN_VALUE; public boolean i原创 2020-09-05 12:13:50 · 142 阅读 · 0 评论 -
(二叉树)剑指 Offer 54. 二叉搜索树的第k大节点
给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:输入: root = [3,1,4,null,2], k = 1示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 3限制:1 ≤ k ≤ 二叉搜索树元素个数题解思路二叉搜索树的中序遍历为 递增序列所以二叉搜索树的 中序遍历倒序 为 递减序列 。因此,求 “二叉搜索树第 k 大的节点” 可转化为求 “此树的中序遍历倒序的第 k 个节点”。实现代码class Solution { i原创 2020-09-05 09:57:59 · 130 阅读 · 0 评论 -
(二叉树)110. 平衡二叉树
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。示例 1:给定二叉树 [3,9,20,null,null,15,7]返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]返回 false 。题解思路若左右子树的深度差的绝对值小于等于1,则返回当前节点的深度若左右子树的深度差的绝对之后大于1,则返回-1实现代码class Solution { public bo原创 2020-09-05 09:30:10 · 161 阅读 · 0 评论 -
(二叉树)15. 二叉树剪枝
给定二叉树根结点 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,1,0,1,0]输出:原创 2020-08-31 11:42:04 · 268 阅读 · 0 评论 -
(二叉树)3. 二叉树最近公共父节点
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5 和节点 1原创 2020-08-29 10:39:26 · 718 阅读 · 0 评论 -
(二叉树)14. 二叉树的直径
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意:两结点之间的路径长度是以它们之间边的数目表示。题解思路直径=max(当前节点到任意节点之间的最大节点数-1)当前节点到任意节点之间的最大节点数=当前节点左子树最大深度原创 2020-08-29 10:10:28 · 165 阅读 · 0 评论 -
(二叉树)1. 求二叉树第K层节点数
题目内容如标题所示题解思路实现代码public class Solution { public int kNum(TreeNode root, int k) { if (root == null || k < 0) { return 0; } if (k == 1) { return 1; } return kNum(root.left, k - 1) + kN原创 2020-08-29 00:33:06 · 202 阅读 · 0 评论 -
(二叉树)4. 二叉树的非递归中序遍历
给定一个二叉树,返回它的中序遍历。示例:输入: [1,null,2,3]1\2/3输出: [1,3,2]题解思路递归的调用过程是不断往左边走,当左边走不下去了,就打印节点,并转向右边,然后右边继续这个过程。我们在迭代实现时,就可以用栈来模拟上面的调用过程。实现代码class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> re原创 2020-08-29 00:09:46 · 171 阅读 · 0 评论 -
(二叉树)13. 求二叉搜索树的任意两个节点值之差的最小值(绝对值)
给定一个二叉搜索树的根节点 root,返回树中任意两节点的差的最小值。示例:输入: root = [4,2,6,1,3,null,null]输出: 1解释:注意,root是树节点对象(TreeNode object),而不是数组。给定的树 [4,2,6,1,3,null,null] 可表示为下图: 4 / \ 2 6 / \ 1 3 最小的差值是 1, 它是节点1和节点2的差值, 也是节点3和节点2的差值。题解思路因为在二叉搜索树中,原创 2020-08-28 23:31:19 · 1050 阅读 · 0 评论 -
(二叉树)7. 二叉树中的最大路径和
8. 二叉树中的最大路径和给定一个非空二叉树,返回其最大路径和。本题中路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例 2:输入: [-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7输出: 42题解思路 1. 从 dfs(-10) 开始, 1.1 dfs原创 2020-08-28 22:56:00 · 318 阅读 · 0 评论