![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
6.二叉树
文章平均质量分 59
二叉树力扣
pig不会cv
这个作者很懒,什么都没留下…
展开
-
6.24修剪二叉搜索树后面还有几道题没写
二叉树写麻了,写学回溯了,以后再回来写。原创 2023-12-19 09:31:20 · 352 阅读 · 0 评论 -
6.23删除二叉搜索树中的节点(LC450-M)
第五种情况,比如要删除节点7,可以让它的左孩子或者右孩子去继位。这里是让左孩子去继位,左孩子比7小,右孩子比7大,那左孩子应该继位在右孩子的最小的节点的左边,即8左边。然后,让3指向9。原创 2023-12-15 21:19:26 · 443 阅读 · 0 评论 -
6.22二叉搜索树中的插入操作(LC701-M)
在二叉搜索树种插入任意一个节点,都可以在找到其可以插入的位置。原创 2023-12-12 16:34:11 · 43 阅读 · 0 评论 -
6.21二叉搜索树的最近公共祖先(L235-M)
可以和上一题一样做,但是最好还是要用上二叉搜索树的特性遍历顺序无所谓,因为中不用写逻辑代码。假如p=3,q=5若当前遍历节点(比如6)比p和q都大,说明p和q一定在当前节点的左子树里面若当前遍历节点(比如2)比p和q都小,说明p和q一定在当前节点的右子树里面若当前遍历节点(比如4)在p和q之间,说明当前节点为p和q的公共祖先。会是最近的公共祖先吗?会。比如遍历到5,p和q一定在5的左右。若继续往左遍历,则会错过q;若继续往右遍历,则会错过p。原创 2023-12-12 15:58:00 · 37 阅读 · 0 评论 -
6.20二叉树的最近公共祖先(LC236-M)
后序遍历:先看左右子树是否有p、q,再向上返回给中节点。原创 2023-12-12 15:17:11 · 30 阅读 · 0 评论 -
6.19二叉搜索树中的众数(LC501-E)
pre指向当前节点cur的前一个节点,如果cur.val= pre.val,count++,count用来统计该数值出现的频率如果 频率count 等于 maxCount(最大频率),当然要把这个元素加入到结果集中。万一,这个maxCount此时还不是真正最大频率呢。频率count 大于 maxCount的时候,不仅要更新maxCount,而且要清空结果集(以下代码为result数组),因为结果集之前的元素都失效了。原创 2023-12-09 09:30:26 · 56 阅读 · 0 评论 -
6.18二叉搜索树的最小绝对差(LC530-E)
二叉搜索树按照中序遍历得到的是一个升序数组。可以用(节省空间)一个指针pre指向当前节点的前一个节点,一个指针cur指向当前节点中序遍历时,用cur.val-pre.val,最后取最小值。原创 2023-12-06 14:46:50 · 33 阅读 · 0 评论 -
6.17验证二叉树(LC98-M)
中序遍历下,输出的二叉搜索树节点的数值是有序序列。有了这个特性,原创 2023-12-05 10:07:12 · 40 阅读 · 0 评论 -
6.16二叉搜索树中的搜索(LC700-E)
二叉搜索树自带顺序,所以不用强调前、中、后序。原创 2023-11-30 11:07:26 · 71 阅读 · 0 评论 -
6.15合并二叉树(LC617-E)
前序、中序、后序都可以,这道题正常逻辑一般都是用前序。原创 2023-11-28 11:00:53 · 51 阅读 · 0 评论 -
6.14最大二叉树(LC654-M)
凡是涉及到构造二叉树的,都要用前序遍历!中:首先找到数组中的最大值,即根节点。构造根节点。左右:接着构造左子树和右子树。使用递归构造。原创 2023-11-28 10:32:45 · 48 阅读 · 0 评论 -
6.13从中序与后序遍历序列构造二叉树(LC106-M)
切割时,保证左闭右开的原则第一步:如果数组大小为零的话,说明是空节点了。第二步:如果不为空,那么取后序数组最后一个元素作为节点元素。第三步:找到后序数组最后一个元素在中序数组的位置,作为切割点第四步:切割中序数组,切成中序左数组和中序右数组 (顺序别搞反了,一定是先切中序数组)第五步:切割后序数组,切成后序左数组和后序右数组第六步:递归处理左区间和右区间。原创 2023-11-27 10:41:18 · 69 阅读 · 0 评论 -
6.12路径总和(LC112-E)
用累减,每遍历一个节点就用target减去其值,减到叶子节点的时候,再判断叶子结点处累减的结果是否为0,若是,说明刚刚的路径有效。原创 2023-11-27 08:13:50 · 43 阅读 · 0 评论 -
6.12找树左下角的值(LC513-M)
比如isEmpty,ArrayList等<数据类型> <变量名> = <初始值>;<数据类型>:表示变量的数据类型,例如intdoubleString等。<变量名>:表示变量的名称,由字母、数字和下划线组成,不能以数字开头,且不能使用Java的关键字作为变量名。<初始值>:表示变量的初始值,可以是一个具体的数值、表达式或者其他变量的值。如果不需要初始值,可以将其省略。比如:List<Integer> itemList = new ArrayList<Integer>();其中。原创 2023-11-26 10:12:08 · 259 阅读 · 0 评论 -
6.11左叶子之和(LC404-E)
在Java中,这意味着在一个源代码文件中,只能有一个类被声明为公共类(使用 `public class` 关键字)。以确保编译器能够正确识别和加载该类。然而,这些非公共类可以在同一个文件中定义,并且可以被同一个包中的其他类访问和使用。虽然一个源代码文件只能有一个公共类,但可以在同一个项目中有多个源代码文件,每个文件都包含一个公共类。这样可以通过在不同的文件中定义不同的公共类来组织和管理代码。原创 2023-11-25 09:33:14 · 55 阅读 · 0 评论 -
从此处开始用Java刷题
从此处开始用Java刷题。原创 2023-11-25 08:26:36 · 16 阅读 · 0 评论 -
6.10二叉树的所有路径(LC257-E,不太会)
因为要让父节点指向孩子节点,才能输出路径。举个例子理解一下:中:先push入1左:再Push入2右:再Push入5 \\1->2->5pop 5pop 2到1的时候,再push入3 \\1->3。原创 2023-11-20 10:51:08 · 44 阅读 · 0 评论 -
6.9平衡二叉树(LC110-E)
绝对值函数:abs()原创 2023-11-19 10:09:10 · 281 阅读 · 0 评论 -
6.8完全二叉树的节点个数(LC222-E)
如果不考虑完全二叉树的特性,直接把完全二叉树当作普通二叉树求节点数,其实也很简单。原创 2023-11-18 12:06:10 · 151 阅读 · 0 评论 -
6.7二叉树的最小深度(LC111)
注意是左右孩子都为空的节点才是叶子节点!。原创 2023-11-18 10:41:37 · 76 阅读 · 0 评论 -
6.6二叉树的最大深度(LC104-E)、N叉树的最大深度(LC559-E)
二叉树的是指从根节点到最远叶子节点的最长路径上的节点数。二叉树的最大深度=二叉树的高度。原创 2023-11-14 11:33:04 · 55 阅读 · 0 评论 -
6.5对称二叉树(LC101-E)
其实就是比较左右子树是否可以翻转比较的时候:比较外面的节点是否相等,如示例1中的节点3比较里面的节点是否相等,如示例1中的节点4。原创 2023-11-11 10:00:02 · 149 阅读 · 0 评论 -
6.4翻转二叉树(LC226—送分题,前序遍历)
第一想法是用昨天的层序遍历,把每一层level用切片反转。但是这样时间复杂度很高。遍历的过程中去翻转每一个节点的左右孩子就可以达到整体翻转的效果。这道题目使用前序遍历和后序遍历都可以,唯独中序遍历不方便,因为中序遍历会把某些节点的左右孩子翻转了两次!建议拿纸画一画,就理解了注意:是指针进行交换,交换的是左右孩子,然后里面的值再交换原因:root没有迭代,一直都是有值的根节点。有递归了,其实不用while循环了。原创 2023-11-11 08:43:31 · 140 阅读 · 0 评论 -
6.3二叉树的层序遍历(LC102,LC107-M)
需要借用一个辅助数据结构即队列来实现,原创 2023-11-10 10:29:16 · 72 阅读 · 0 评论 -
6.2二叉树的迭代遍历(LC144,LC145,LC94-E)
然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因。所以,使用栈也可以实现二叉树的前后中序遍历然而,,不像是递归法,实现了其中的一种遍历方式,其他两种只要稍稍改一下节点顺序就可以了。原创 2023-11-09 10:20:01 · 49 阅读 · 0 评论 -
6.1二叉树的递归遍历(LC144,LC145,LC94-E)
递归函数是一种函数调用自身的编程技巧。在递归函数中,函数通过不断调用自身来解决一个问题,直到达到基本情况(递归终止条件)并返回结果。 递归函数在解决一些问题时非常有用,特别是那些具有递归结构的问题,例如树、图等。通过使用递归函数,可以简化问题的表达和解决过程。 需要注意的是,在编写递归函数时,确保递归终止条件能够被满足,并且每次递归调用都能使问题规模减小,以避免无限递归和栈溢出等问题。此外,递归函数的性能可能不如迭代方式,因此在某些情况下,考虑使用迭代方法来替代递归。确定递归函数的参数和返回值: 确定哪些参原创 2023-11-08 09:10:46 · 227 阅读 · 0 评论