二叉树
文章平均质量分 55
kirei12315
这个作者很懒,什么都没留下…
展开
-
二叉搜索树类题目
那么我们遍历数组的时候,同时考虑前后是否一致,如果一致则count+1,最后统计count谁最大即可,但是这里还有两个要注意的地方,一个是count可能存在一样大的,另一个是count的最大值是不断改变的,如果最大值变大,就要重新更换最大值,并且清零之前的内容。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;原创 2023-02-26 19:23:13 · 105 阅读 · 0 评论 -
最大二叉树
题目中说了输入的数组大小一定是大于等于1的,所以我们不用考虑小于1的情况,那么当递归遍历的时候,如果传入的数组大小为1,说明遍历到了叶子节点了。确立参数和返回条件:由于二叉树是遍历整棵数,参数传入的是存放元素的数组,返回该数组构造的二叉树的头结点,返回类型是指向节点的指针。思路:找到数组中的最大值,然后取最大值左边的数组为左子树,最大值右边的数组为右子树,所以我们自然而然的想到了使用递归的方法。我们要考虑左子树右子树的单层递归逻辑,这里有三个任务,首先找到最大值,然后确立最大值左右数组,再进行递归。原创 2023-02-25 15:39:56 · 28 阅读 · 0 评论 -
从中序(前序)与后序(中序)遍历序列构造二叉树
思路:中序和后序遍历分别是左中右和左右中,我们会发现可以先从后序遍历的最后一个节点寻找根节点root,然后从中序遍历找到这个根节点,并从这个节点进行切割,其左右节点分别是左右孩子,然后切割后序数组,这样完成了某层的运算后,进行递归。原创 2023-02-24 16:53:04 · 48 阅读 · 0 评论 -
路径总和(1和2)
做这道题之前首先提到一点,那就是递归什么时候需要返回值,什么时候不需要返回值,可以分为三类:要遍历整颗二叉树,同时不需要处理返回值,递归函数就不需要返回值(路径总和2)需要搜索整棵二叉树,同时还需要处理递归返回值,则递归函数就需要返回值(二叉树的最近公共祖先)只需要遍历部分二叉树,则递归一定需要返回值,因为遇到了符合条件的就要及时返回(路径总和1)原创 2023-02-23 22:48:10 · 30 阅读 · 0 评论 -
左叶子之和
思路:注意这道题目要求求左叶子的和,而不是左节点的和,更不是左边的和,所以不能使用默认的层序遍历去求左边的值,而是从父节点的角度去思考:左叶子有这样的特性,它的左右节点都是空的,同时它的父节点只有左节点!所以我们应该从父节点的角度去考虑。原创 2023-02-23 11:44:43 · 39 阅读 · 0 评论 -
对称二叉树
判断左右对称并不是左节点右节点,而是根节点的左右子树,节点的左右判断完后,要判断根节点的左右的子节点,详细的说也就是根节点的左节点的左节点(示例中的3)对比根节点的右节点的右节点(示例中的3),在对比根节点的右节点的左节点和根节点左节点的右节点(4),这个时候我们发现,我们想要判断每一层的这几个节点是否相等,但凡有不相等的就return false。此时才进入单层递归的逻辑,单层递归的逻辑就是处理 左右节点都不为空,且数值相同的情况。比较二叉树外侧是否对称:传入的是左节点的左孩子,右节点的右孩子。原创 2023-02-19 18:50:10 · 36 阅读 · 0 评论 -
翻转二叉树(多种思路)
返回值的话其实也不需要,但是题目中给出的要返回root节点的指针,可以直接使用题目定义好的函数,所以就函数的返回类型为TreeNode*。(引用代码随想录卡哥的话,个人觉得解释的很清楚)思路:这里注意函数返回二叉树,所以不需要提前设置return数列,直接使用root即可,思路就是在每次要将左右节点入栈之前进行swap。参数就是要传入节点的指针,不需要其他参数了,通常此时定下来主要参数,如果在写递归的逻辑中发现还需要其他参数的时候,随时补充。思路:和迭代法差不多,就是在左右节点入队之前进行swap。原创 2023-02-19 17:29:52 · 146 阅读 · 0 评论 -
二叉树所有路径
一开始看到这道题的时候,发现有几个地方需要注意,,与以往的遍历不同,这道题需要返回字符串,也就是使用string的转化,同时考虑到遍历到叶子节点的时候,是需要返回的,也就是回溯。遍历顺序是根节点到叶子节点,所以考虑使用前序遍历。其次是确定终止条件,在这道题中,当遍历到叶子节点的时候结束,也就是说当node的左孩子有孩子均为空的时候结束遍历,然后进行path的转换和数组变换。肯定是不需要的,所以我们统计的时候统计到[i-1]个path,最后一个由我们手动输入。说明: 叶子节点是指没有子节点的节点。原创 2023-01-30 17:44:49 · 27 阅读 · 0 评论 -
平衡二叉树(递归)
这个时候我们发现和之前的深度计算有所区别,之前使用层序遍历解决深度问题的时候,我们都是从根节点出发逐渐增加depth的值,但是这道题的根节点是不断改变的,也就是我们遍历的每一个节点都会看做根节点,然后判断他的子节点(如果有)差距是否大于1,所以无法应用层序遍历进行,需要考虑递归或迭代。如果考虑递归迭代 ,我们发现后序遍历是我们所需要的,因为我们要求某节点的高度,都是从叶子节点入手,最后考虑中间节点,故采用后序遍历的”左右中“是我们所需的。二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数。原创 2023-01-29 21:27:52 · 109 阅读 · 0 评论 -
完全二叉树节点个数
这道题本质上是要遍历左右二叉树,然后进行统计。用递归解决的话,可以在递归中顺便定义左孩子和有孩子的数量,然后进行求和(不要忘记还有一个根节点)如果用迭代的方法解决的话,则可以考虑在层序遍历中的每一层循环中统计节点数目。给出一个完全二叉树,求出该树的节点个数。用完全二叉树方法比较复杂,所以考虑用简单的递归和。迭代进行遍历并求知。原创 2023-01-29 18:39:37 · 29 阅读 · 0 评论 -
二叉树的修改与构造
101. 对称二叉树。原创 2023-01-29 13:13:26 · 43 阅读 · 0 评论 -
二叉树层序遍历与相应题目
思路如下:我们都知道size大小是某一层进入队列的值的多少,也就是,size = 5的时候,说明这一层有5个进入队列,那么当遍历到地5-1个,也就是i = size - 1;思路:每一行中找到最大值,则需要层序遍历后,在每一层进行比较,具体思路可以是:创建一个极小值INT_IN,然后遍历node的值和极小值做比较,最后选出最大的。给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。思路:针对这个题目,我们的思路也很明确,那就是用sum统计每一层的每个节点的和,然后。原创 2023-01-29 12:46:39 · 38 阅读 · 0 评论 -
迭代法遍历二叉树
和递归法不同,迭代法的中序遍历并不是前序遍历修改顺序,原因很简单,前序遍历的顺序是中左右,先遍历中节点然后是左右,正好我们入栈顺序也是中节点先进去,无非是左右节点交换进去的顺序以保证出栈的顺序相反。原创 2023-01-28 21:12:02 · 40 阅读 · 0 评论 -
二叉树遍历方式——递归法
确定递归参数和返回值,在具体代码中实现,在本案例中,我们要用一个数组的方式来存储遍历的节点,所以参数需要用数组vector来存放数值,由于vec需要进行改变,所以引用的时候需要注意物理引用格式。递归单层逻辑:前序遍历法是中左右进行遍历,也就是先取中节点的数值,然后取左节点和右节点的数值。中序遍历则是左中右的方式,也就是先去左节点再去中间节点和右节点,同理,后序遍历是先取左节点,然后右节点,最后中间节点。在leetcode刷题中,二叉树的遍历方法可以简单的分为深度优先遍历和广度优先遍历。确定单层递归的原理。原创 2023-01-28 11:11:31 · 235 阅读 · 0 评论