二叉树
文章平均质量分 84
二叉树
J rubyjane
这个作者很懒,什么都没留下…
展开
-
代码随想录算法训练营第二十三天| 669.修建二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
这是一棵树,换一个角度来看,这就是一个有序数组[2, 5, 13],求从后到前的累加数组,也就是[20, 18, 13]。如果数组长度为偶数,中间节点有两个,取哪一个都可以,只不过构成了不同的平衡二叉搜索树。1.在构造二叉树的时候尽量不要重新定义左右区间数组,而是用下标来操作原数组。,分割点作为当前节点,然后递归左区间和右区间。,这么操作就越界了,尤其需要注意!,这么写其实有一个问题,就是数值越界,例如。区间在二叉搜索树的中可不是单纯的节点。的前一个节点,这样才方便做累加。就决定的,还要考虑节点。原创 2024-04-04 20:54:33 · 463 阅读 · 0 评论 -
代码随想录算法训练营第二十二天| 235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
其中当要删除的节点的左右子树都不为空,一直循环找到右子树最左边的节点时,注意判断条件必须为。迭代法遍历的过程中,需要记录一下当前遍历的节点的父节点,这样才能做插入节点的操作。图片来自热心网友(大佬)指针来记录上一个节点。右子树的最左边节点的。原创 2024-04-03 17:01:41 · 604 阅读 · 0 评论 -
代码随想录算法训练营第二十一天| 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236.二叉树的最近公共祖先
其实就是一个有序数组。这道题就变成在一个有序数组上求两个数最小差值。在二叉搜索树中序遍历的过程中,可以直接计算。把这个树都遍历了(至于用前中后序哪种遍历不重要,因为就是要全遍历一遍,怎么个遍历法都行,层序遍历都没毛病),然后用。,因这样每次加入的都不是同一个对象,那所有节点的频次都为。只要把中序遍历转成迭代,中间节点的处理逻辑完全一样。节点记录一下cur节点的前一个节点。在获得最大频率时,可以。时,一定要注意泛型的使用,,要将每个节点的值作为。原创 2024-04-02 20:51:25 · 321 阅读 · 0 评论 -
代码随想录算法训练营第二十天| 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
(中左右),先构造根节点然后才能递归去构造左右子树。与 106.从中序与后序遍历序列构造二叉树 和 105.从前序与中序遍历序列构造二叉树 相似。:递归函数的参数传入的就是根节点和要搜索的数值,返回的就是以这个搜索数值所在的节点。同时遍历就同时判断两个树的情况,改变其中一棵树的结构来当做需要生成的新的数。(1)递归,中序遍历,存放所有节点的val;,则不需要覆盖,直接用另一个二叉树返回就行。终止条件:如果其中一个二叉树的根节点为。通过队列成对存放两个树的节点即可。所以以上代码的判断逻辑是错误的。原创 2024-04-01 12:05:47 · 1931 阅读 · 0 评论 -
代码随想录算法训练营第十八天| 513.找树左下角的值、112.路径总和、113.路径总和II、106.从中序与后序遍历构造二叉树、105.从前序与中序遍历构造二叉树
为节点在中序遍历数组的索引值。传入中序和后序遍历数组以及他们的开始索引和结束索引。:最底层最左边节点的值不一定是左节点的值,也有可能是右节点的值。中的所有路径都变成了相同的路径,因为它们都引用了同一个。列表是一个引用类型的变量,当在后续的递归调用中修改。累加然后判断是否等于目标和,代码比较麻烦,耗时。列表的副本来实现这一点。②在构造左右子树时,传入的索引很容易出错,注意。中时,创建一个新的列表对象,而不是直接使用。中,而不会影响到后续的递归调用中的。的思路基本一样,区别在于该题中。:切割的索引很容易写错。原创 2024-03-28 22:19:33 · 728 阅读 · 0 评论 -
代码随想录算法训练营第十七天| 110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和
从根节点开始到叶子节点的路径,必须前序遍历(先访问中节点,再访问左右节点),如果遇到叶子节点,就将字符串加入路径集合。:一个二叉树每个节点的左右两个子树的高度差的绝对值。但是本题的终止条件这样写会很麻烦,因为本题要找到。:要传入根节点,记录每一条路径的。(该逻辑可以控制空节点不入循环)用来拼接字符串(速度更快)。②终止处理逻辑(把路径放进。,这里递归不需要返回值。的时候,就找到叶子节点。不为空,其左右孩子都为。原创 2024-03-27 21:33:21 · 605 阅读 · 0 评论 -
代码随想录算法训练营第十六天| 104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数
注:在遍历N个子节点时注意代码的健壮性,要考虑当前节点是否有子节点链表以及链表中的子节点是否为。(1)二叉树的最大深度 = 根节点的最大高度,父节点的最大高度 = 左右子节点高度的最大值。确定单层逻辑时,在循环遍历该节点的子节点时获取所有子节点的高度的最大值,再在循环后。(1)直接求深度,用前序遍历从上往下遍历,子节点的深度 = 父节点的深度。(需要先访问左右节点,再访问中节点,所以对应的是后序遍历)父节点的最小高度 = 左右节点的高度最小值。判断满二叉树的方法:向左遍历的深度。作为当前节点的高度。原创 2024-03-26 16:49:44 · 1598 阅读 · 0 评论 -
代码随想录算法训练营第十五天| 二叉树的层序遍历、226.翻转二叉树、101.对称二叉树
②BFS–迭代方式–借助队列①最后返回的链表 需作为类的属性,因其需被该类的所有访问。②借助队列实现遍历元素,当队列不为空()时说明节点还没有遍历完;③在每一层遍历的时候,一定要使用固定大小的,不要使用,因为是不断变化的。(除了要将自己的值弹出来加入链表中,还要将自己的左右孩子放进队列中,作为下一层遍历。)③将每一层的元素放在一个链表里面,最后将每一层的加入到最终要返回的链表里面。107.二叉树的层次遍历 II相对于 102.二叉树的层序遍历,就是最后把链表反转一下就可以了。①使用类的方法原创 2024-03-25 12:15:17 · 831 阅读 · 0 评论 -
代码随想录算法训练营第十四天| 递归遍历、迭代遍历
思路:左中右,借用指针的遍历来帮助访问节点,栈则用来处理节点上的元素。思路:中左右,先记录中间节点,再将右节点和左节点依次压入栈。思路:左右中,反过来就是中右左,那么入栈顺序就是中左右。注意:右节点比左节点先入栈,是为了先让左节点弹出。将要处理的节点放入栈之后,紧接着放入一个。原创 2024-03-21 21:17:02 · 310 阅读 · 0 评论