![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二叉树
DarkFlameMaster2188
这个作者很懒,什么都没留下…
展开
-
把二叉搜索树转换为累加树
然后进行顺序累加就可以了。相当于把二叉搜索树看做一个从大到小的数组,然后从数组的头个元素对数组进行累加操作。注意,本题使用两个指针,pre用来记录前一个节点的累加值,cur指针用来修改当前节点的值,并将修改后的值赋予pre指针。本题我给想复杂了,其实思路并不难,只需要通过。原创 2024-06-17 16:06:51 · 192 阅读 · 0 评论 -
将有序数组转换为二叉搜索树
本题思路比较简单,找出有序数组的中间元素,将其作为分割点,把有序数组分割为左子树区间和右子树区间,再分别进行递归即可。原创 2024-06-17 15:41:34 · 386 阅读 · 1 评论 -
修剪二叉搜索树
节点值大于最大值时,对节点左子树进行递归,返回节点左子树;当节点值小于最小值时,对节点右子树进行递归,返回节点右子树;若无,则对节点的左右子树进行递归,返回root。同时,不需对节点值等于最大或最小值进行额外操作,继续递归即可(我的思想误区)(1)节点值大于最大值,继续对节点的左子树进行递归,并将节点的左子树返回。(2)节点值小于最小值,继续对节点的右子树进行递归,并将节点的右子树返回。参数为当前节点,最小值,最大值,返回值为节点。当节点为空时,返回空指针。(1)确定参数和返回值。原创 2024-06-17 10:57:30 · 157 阅读 · 0 评论 -
删除二叉搜索树中的节点
本题核心思想在于,当找到对应值的节点时,该如何处理节点进行删除操作?我最开始思路没有想明白当节点的左右子树都存在时,该如何操作:首先,要记住二叉搜索树的性质,第三种情况:删除节点的左孩子为空,右孩子不为空,删除节点,右孩子补位,返回右孩子为根节点。第四种情况:删除节点的右孩子为空,左孩子不为空,删除节点,左孩子补位,返回左孩子为根节点。第二种情况:左右孩子都为空(叶子节点),直接删除节点, 返回NULL为根节点。第一种情况:没找到删除的节点,遍历到空节点直接返回了。参数为当前节点和目标值,返回值为节点。原创 2024-06-15 22:16:29 · 198 阅读 · 0 评论 -
二叉树的最近公共祖先
先用left和right接住左子树和右子树的返回值,如果left 和 right都不为空,说明此时root就是最近公共节点。如果left为空,right不为空,就返回right,说明目标节点是通过right返回的,反之依然。本题做法就是回溯,而后序遍历过程是天生的回溯过程,所以本题采用后序遍历。递归的输入参数是当前节点和p、q节点,而本题需要找到公共节点,因此返回值应为节点。递归函数有返回值,如何区分要搜索一条边,还是搜索整个树呢?当前节点为空或者等于p、q时,应返回当前节点,进行回溯。原创 2024-06-12 15:24:25 · 205 阅读 · 0 评论 -
二叉搜索树中的众数
(3)分别记录最大频率和当前频率,若当前频率等于最大频率,将当前值加入结果数组,若当前频率小于最大频率,则更新最大频率,清空结果数组,再将当前值加入结果数组;(2)用两个指针分别指向前一个节点和当前节点,比较两者的值,若相等则当前频率加一,若不等则恢复当前频率为1,重新比较下一个值;(1)因为二叉搜索树是有序的,根据中序遍历就是有序数组,所以比较相邻元素的值,频率出现最高的作为输出;原创 2024-06-11 17:33:44 · 161 阅读 · 0 评论 -
二叉搜索树的最小绝对差
本题思路同验证二叉搜索树,以前序遍历的方式将二叉搜索树变为一个递增的有序数组,求数组的最小绝对差就可以了。原创 2024-06-11 16:45:16 · 88 阅读 · 0 评论 -
验证二叉搜索树
使用中序遍历,因为遍历顺序为左中右,二叉搜索树在中序遍历情况下为递增序列,所以验证二叉搜索树,就相当于变成了判断一个序列是不是递增的了。可以递归中序遍历将二叉搜索树转变成一个数组,然后只要比较一下,这个数组是否是有序的,注意。原创 2024-06-06 17:18:08 · 153 阅读 · 0 评论 -
合并二叉树
(2)确定终止条件:若输入的两个节点有一个为空,则将另一个节点作为合并后的节点返回(若两个都为空节点也适用)(3)递归逻辑:若两个节点都存在,则合并后的节点的值为两者值相加,左右子树为两者左右子树递归。(1)确定递归的参数和返回值:参数为两个节点,返回值为合并后的节点。原创 2024-06-06 15:23:45 · 117 阅读 · 0 评论 -
最大二叉树
【代码】最大二叉树。原创 2024-06-05 17:03:56 · 156 阅读 · 0 评论 -
从中序与后序遍历序列构造二叉树
【代码】从中序与后序遍历序列构造二叉树。原创 2024-06-05 16:02:54 · 142 阅读 · 0 评论 -
二叉树路径总和
本题我刚开始的想法是使用数组储存路径上的节点,遍历到叶子结点时再求和并与目标值进行比较,但这种做法使代码更加复杂,不仅要引入数组操作,还需要多个for循环用来求和。因此,本题采用递减法更加合适,没遍历一个路径上的节点,便将目标值减去节点的值,当遍历到叶子结点时判断目标值是否为0。(1)递归函数是有返回值的,如果递归函数返回true,说明找到了合适的路径,应该立刻返回。(3)头次遍历的目标值应减去根节点的值。(2)每次向下遍历应包含回溯。原创 2024-06-05 10:36:57 · 159 阅读 · 0 评论 -
找树左下角的值
本题有两种解法,递归法和层序遍历迭代。原创 2024-06-04 15:58:28 · 210 阅读 · 0 评论 -
左叶子之和
(1)此节点为其父节点的左孩子。(2)此节点为叶子结点。原创 2024-06-04 15:13:03 · 109 阅读 · 0 评论 -
二叉树的所有路径
本题的重要思想是回溯,每次记录完当前路径都需要返回上一节点寻找下一路径,因此需要用数组记录当前遍历过的节点,进行回溯操作。(1)需要判断当前节点是否为叶子结点,若节点的左右孩子都为空,则当前节点是叶子结点,需要对当前数组所保存的路径进行记录。(2)若节点的左孩子存在,则对节点的左孩子进行下一步递归,同时进行回溯操作,将数组内的最后一个节点弹出。(3)若节点的右孩子存在,则对节点的右孩子进行下一步递归,同时进行回溯操作,将数组内的最后一个节点弹出。原创 2024-06-03 09:33:58 · 127 阅读 · 0 评论 -
平衡二叉树
若小于1,则当前节点的高度为1+左右子树中较大的高度(叶子结点的左右子树高度都为0 ,因此叶子结点高度是1,高度的返回值每次增加1)逻辑如下:传入参数是当前遍历的节点,返回值是当前子树的高度,若返回值为-1,则当前节点为根节点的子树不是平衡二叉树,此二叉树也不是平衡二叉树。首先明确二叉树的高度和深度是两个不同的概念,深度是从上到下的,高度是从下到上的。高度:从该节点到叶子节点的最长简单路径边的条数。深度:从根节点到该节点的最长简单路径边的条数。原创 2024-06-01 23:03:23 · 160 阅读 · 0 评论 -
完全二叉树的节点个数
首先,要理解完全二叉树的特性,在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。而判断是否为满的完全二叉树,就需要靠遍历,如果向左遍历的深度等于向右遍历的深度,则二叉树为满的二叉树,因此需要记录向两边遍历的深度depth(初始值为0),满二叉树节点数为(2原创 2024-06-01 16:51:14 · 237 阅读 · 0 评论 -
二叉树的最小深度
写递归法的代码时,要注意节点的左右子树情况:(1)左子树存在,右子树不存在,最小深度为1+左子树深度(2)右子树存在,左子树不存在,最小深度为1+右子树深度。二叉树的最小深度直觉上和二叉树的最大深度差不多,但其实存在一个误区,也就是根节点的左子树或者右子树不存在,如果不加判断条件,很容易将二叉树的最小深度求为1。且深度为二叉树到叶子结点的距离,而叶子结点为左右子树都为空的节点,在求深度时要判断是否为叶子结点。写迭代法代码时,要判断节点是否为叶子节点,是叶子结点时返回深度,即为二叉树的最小深度。原创 2024-06-01 09:41:01 · 114 阅读 · 0 评论 -
对称二叉树
外侧即左子树的左侧子节点和右子树的右侧子节点,里侧即左子树的右侧子节点和右子树的左侧子节点。对称二叉树可以用递归法和迭代法实现,其核心在于判断对称二叉树要。(2)其中一个子节点为空时,两个子节点不对称;(3)两个子节点值不相同时,两个子节点不对称;(1)两个子节点都为空时,两个子节点对称;原创 2024-05-30 10:37:11 · 152 阅读 · 0 评论 -
二叉树的层序遍历
保证每层一维数组的大小是正确的,所以使用size确定队列的长度,然后使用for循环向一维数组里填充数值,再将每一层所得到的数组放到二维数组里。这道题注意返回结果值是一个二维数组,而不是一维数组,每一层的值放进一个一维数组里,因此需要。原创 2024-05-28 19:14:58 · 181 阅读 · 0 评论 -
二叉树的统一迭代法
每次对栈进行操作,需要一个临时指针指向栈顶元素,栈顶元素不是空指针时,根据反向遍历顺序将节点进行入栈操作(对中间节点进行处理);栈顶元素为空指针时,将栈顶元素的值保存到容器中,从事实现二叉树的统一迭代法。二叉树的统一迭代法:二叉树在遍历时不会第一时间处理中间节点,因此处理过中间节点后需要在。以下为二叉树的后序遍历(左右中,入栈顺序为中右左)原创 2024-05-28 16:03:13 · 217 阅读 · 0 评论