![](https://img-blog.csdnimg.cn/d92f3605c89743dba0a32dbb9cb259b3.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
二叉树
文章平均质量分 60
二叉树
zzu菜
努力努力在努力!
展开
-
538.把二叉搜索树转换为累加树
538.把二叉搜索树转换为累加树给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]输出:[30,36,21原创 2022-04-25 15:53:11 · 170 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树(图文并解)
108. 将有序数组转换为二叉搜索树给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。示例 1:输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:示例 2:输入:nums = [1,3]输出:[3,1]解释:[1,null,3]原创 2022-04-21 16:43:09 · 1519 阅读 · 0 评论 -
669. 修剪二叉搜索树
669. 修剪二叉搜索树给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在 唯一的答案 。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。示例 1:输入:root = [1,0,2], low = 1, high = 2输出:[1,null,2原创 2022-04-21 14:27:51 · 275 阅读 · 0 评论 -
450. 删除二叉搜索树中的节点
450. 删除二叉搜索树中的节点给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。示例 1:输入:root = [5,3,6,2,4,null,7], key = 3输出:[5,4,6,2,null,null,7]解释:给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。原创 2022-04-20 10:43:08 · 296 阅读 · 0 评论 -
701. 二叉搜索树中的插入操作
701. 二叉搜索树中的插入操作给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。示例 1:输入:root = [4,2,7,1,3], val = 5输出:[4,2,7,1,3,5]解释:另一个满足题目要求可以通过的树是:示例 2:输入:root原创 2022-04-19 10:53:20 · 114 阅读 · 0 评论 -
235. 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 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 和原创 2022-04-19 10:15:50 · 71 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
236. 二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3 。示例 2:输入:root = [3,5原创 2022-04-18 20:36:01 · 132 阅读 · 0 评论 -
501. 二叉搜索树中的众数
501. 二叉搜索树中的众数给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。如果树中有不止一个众数,可以按 任意顺序 返回。假定 BST 满足如下定义:结点左子树中所含节点的值 小于等于 当前节点的值结点右子树中所含节点的值 大于等于 当前节点的值左子树和右子树都是二叉搜索树示例 1:**输入:**root = [1,null,2,2]输出:[2]示例 2:**输入:**root = [0]输出:[0]/*原创 2022-04-18 15:18:11 · 129 阅读 · 0 评论 -
530. 二叉搜索树的最小绝对差
530. 二叉搜索树的最小绝对差给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。差值是一个正数,其数值等于两值之差的绝对值。示例 1:输入:root = [4,2,6,1,3]输出:1示例 2:输入:root = [1,0,48,null,null,12,49]输出:1思考注意题目,此二叉树为二叉搜索树 ,其中序遍历为有序序列。我们需要获取此二叉树任意节点的之差绝对值的最小值,只需要根据顺序进行比较从而获取最小值即可。/** * Defin原创 2022-04-18 11:29:26 · 179 阅读 · 0 评论 -
617. 合并二叉树
617. 合并二叉树给你两棵二叉树: root1 和 root2 。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。返回合并后的二叉树。注意: 合并过程必须从两个树的根节点开始。示例 1:输入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]原创 2022-04-15 14:50:57 · 51 阅读 · 0 评论 -
654. 最大二叉树
654. 最大二叉树给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。返回 nums 构建的 最大二叉树 。示例 1:输入:nums = [3,2,1,6,0,5]输出:[6,3,5,null,2,0,null,null,1]解释:递归调用如下所示:[3,2,1,6,0,5] 中的最大值是 6原创 2022-04-14 21:31:41 · 411 阅读 · 0 评论 -
106. 从中序与后序遍历序列构造二叉树
从中序与后序遍历序列构造二叉树原创 2022-04-13 15:53:34 · 1016 阅读 · 0 评论 -
113. 路径总和 II
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22输出:[[5,4,11,2],[5,8,4,5]]示例 2:输入:root = [1,2,3], targetSum = 5输出:[]示例 3:输入:root = [1,2], target原创 2022-04-11 20:38:33 · 302 阅读 · 0 评论 -
112. 路径总和
112. 路径总和给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true解释:等于目标和的根节点到叶节点路径如上图所示。示例原创 2022-04-11 20:34:54 · 186 阅读 · 0 评论 -
513. 找树左下角的值
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。示例 1:输入: root = [2,1,3]输出: 1示例 2:输入: [1,2,3,4,null,5,6,null,null,7]输出: 7思考这里使用层次遍历,如果下一层为空,则获取该层最左边的节点。layerNodes:表示当前层的节点数temp:记录下层的节点数tempNode :表该层最左边的节点package 力扣;import java.util.原创 2022-04-11 15:35:13 · 772 阅读 · 0 评论 -
257. 二叉树的所有路径
257. 二叉树的所有路径给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点 是指没有子节点的节点。示例 1:输入:root = [1,2,3,null,5]输出:[“1->2->5”,“1->3”]示例 2:输入:root = [1]输出:[“1”]思考需要一个栈来临时存储遍历到叶子节点的序列遍历的时候可以考虑使用前序遍历。首先把该节点的val加入stack,判断该节点是否有左右子树,来判断该节点是否是叶子节点如原创 2022-04-11 14:09:40 · 261 阅读 · 0 评论 -
110. 平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树_每个节点_ 的左右两个子树的高度差的绝对值不超过 1 。示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3,null,null,4,4]输出:false示例 3:输入:root = []输出:true思考方法一前序遍历,对节点的操作是:对每个节点获取其左右子树的高度,并且判断是否大于2效率原创 2022-04-11 09:14:31 · 138 阅读 · 0 评论 -
101. 对称二叉树
给你一个二叉树的根节点 root , 检查它是否轴对称。示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:root = [1,2,2,null,3,null,3]输出:false思考对称二叉树,其实可以转化为根节点的左子树A是否和其右子树B对称。如何判断是否对称,可以翻转左子树A,然后同时层次遍历A和B子树(如果某个节点只有一个子树,另一个子树需要记为null)。大致步骤获取根节点的左右子树left,right翻转left将left原创 2022-04-08 13:49:55 · 164 阅读 · 0 评论 -
226. 翻转二叉树
226. 翻转二叉树给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例 2:输入:root = [2,1,3]输出:[2,3,1]示例 3:输入:root = []输出:[]思考这道题目背后有一个让程序员心酸的故事,听说 Homebrew的作者Max Howell,就是因为没在白板上写出翻转二叉树,最后被Google拒绝了。基于前序遍历,交换左右子树。/**原创 2022-04-08 08:56:42 · 543 阅读 · 0 评论 -
111.二叉树的最小深度
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。**说明:**叶子节点是指没有子节点的节点。思考同样可以利用两种方法实现层次遍历层次遍历class Solution { public int minDepth(TreeNode root) { int mini = 1; int LayerNodes = 1; Queue<TreeNode> queue=new LinkedLis原创 2022-04-07 21:14:32 · 628 阅读 · 0 评论 -
求二叉树的最大深度两种方法实现及对比
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。**示例:**给定二叉树 [3,9,20,null,null,15,7],思考第一种方法,层次遍历第二种方法,前序遍历递归法层次遍历layerNodes:代表当前层节点数temp:下一层节点数max:代表最大深度package 力扣;import java.util.ArrayList;import java.util.LinkedList;impor原创 2022-04-07 20:33:34 · 495 阅读 · 0 评论 -
116. 填充每个节点的下一个右侧节点指针
116. 填充每个节点的下一个右侧节点指针给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。示例 1:输入:root = [1,2,3,4,5,6,7]原创 2022-04-07 10:19:08 · 103 阅读 · 0 评论 -
199. 二叉树的右视图
199. 二叉树的右视图给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例 1:输入: [1,2,3,null,5,null,4]输出: [1,3,4]示例 2:输入: [1,null,3]输出: [1,3]示例 3:输入: []输出: []思考LayerNodes:表示当前层节点数,初始化为1,代表第一层一个节点。/** * Definition for a binary tree node. * public原创 2022-04-06 18:46:06 · 664 阅读 · 0 评论 -
107. 二叉树的层序遍历 II
107. 二叉树的层序遍历 II给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)示例 1:输入:root = [3,9,20,null,null,15,7]输出:[[15,7],[9,20],[3]]示例 2:输入:root = [1]输出:[[1]]示例 3:输入:root = []输出:[]思考二叉树的层数遍历,遍历完当前层,需要存储下一层的节点,所以这里我使用Java的队列用来存储。同时设置 L原创 2022-04-06 16:45:30 · 100 阅读 · 0 评论 -
102. 二叉树的层序遍历
102. 二叉树的层序遍历给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。示例 1:输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]示例 2:输入:root = [1]输出:[[1]]示例 3:输入:root = []输出:[]思考二叉树的层数遍历,遍历完当前层,需要存储下一层的节点,所以这里我使用Java的队列用来存储。同时设置 LayerNodes 表示当前层节点数原创 2022-04-06 16:34:14 · 904 阅读 · 0 评论 -
二叉树的递归遍历和迭代遍历
二叉树的遍历分为 前序遍历、中序遍历、后序遍历、层次遍历其实现可以利用递归或者迭代的方法。递归遍历这里帮助大家确定下来递归算法的三个要素。每次写递归,都按照这三要素来写,可以保证大家写出正确的递归算法!确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构原创 2022-04-06 15:10:01 · 557 阅读 · 0 评论 -
二叉树基础知识
二叉树理论基础篇二叉树题目力扣分类及对应题号。二叉树的种类在我们解题过程中二叉树有两种主要的形式:满二叉树和完全二叉树。#满二叉树满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。如图所示:这棵二叉树为满二叉树,也可以说深度为k,有2^k-1个节点的二叉树完全二叉树什么是完全二叉树?完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若原创 2022-04-06 10:11:36 · 114 阅读 · 0 评论