二叉树___

遍历

前序遍历

中序遍历

后序遍历

层序遍历

 

 

树的层次遍历算法思想:
①初始化一个辅助队列
②根结点入队
③若队列非空,则队头结点出队,访问该结点,并将其左、右孩子插入队尾(如果有的话)
④重复③直至队列为空
 

递归

1.刷题套路

 

  1.  二叉树的递归解题套路:设定当前节点为根节点,首先,根据当前节点运行的情况,考虑递归的停止条件和返回的结果;然后,根据题目确定根节点从左子节点和右子节点中获取的信息(可以建立两个类存放获取的信息);接下来,在当前节点中对从左右子节点中获取到的信息进行整合,可以分为两类:当前节点的值利用其左右子树的信息计算而得、当前节点的值与其左右子树无关;最后,递归返回当前节点的处理信息。

  2. 当前节点借助左右子节点进行处理:如果当前节点要根据左右子树的处理结果才可以进行处理,那么可以基于后序遍历(左右根)进行实现,即先处理左右子节点再考虑当前节点的处理。具体实现方式:对于后序遍历的递归函数设置返回值,当前节点获取左右子节点的返回值然后再处理当前节点。

  3. 递归序解决二叉树问题的使用场景:分析题目查看是否是递归序,如果是则可以基于递归序进行解题。递归序包含了先序(根左右)、中序(左根右)、后序(左右根),但还有许多序列也是递归序,例如根右左、右根左等。

  4. 递归序解决二叉树问题中的返回结果:如果采用递归序解题,递归函数的返回值可以直接就是题目所求,也可以是个类,其中除了题目所求之外还有一些辅助解题的信息。

  5. 二叉树解题思路:可以设定二叉树中某个节点就是根节点(或是左节点,或是右节点),然后再分情况进行讨论。

  6. 二叉树深度计算方式:在满二叉树中,递归序中往左子树/右子树中递归的次数就是二叉树的深度。

  7. 满二叉树的递归访问:如果能确定左子节点和右子节点的值,并且为满二叉树,那么可以不用建立二叉树就可以通过递归序直接进行打印每个节点。

  8. 逐层遍历的使用场景:二叉树题目中出现,与树的层次有关系的情况时,可以基于二叉树的逐层遍历方法从而进行解题;具体方法是采用队列实现,弹出某节点的同时将弹出节点的左右子节点加入到队列中(如果存在的左、右子节点),设置三个变量(当前层尾结点、下一层尾结点、当前层数)来判断当前层的层数和每一层具有的节点数量等信息。

  9. 二叉树三种遍历之间的转换:可以根据三种遍历之间的关系通过递归的方式由已知的两种遍历结果得到第三种遍历结果。

2.其他

  1. Map双列结合辅助解题:可以使用map双列集合进行解题,不要总考虑单列集合;

  2. 打印规范图像的方法:如果需要将数据打印出规范的图形,可以设定每个数据占用固定的长度,数据显示的话放在该长度的中间位置,那么就是规范的图形了。

  3. Morris算法解题的依据:如果二叉树的逻辑归纳为左子树获得的值与右子树获得值同时进行处理才能得到结果,那么不能用Morris算法改进得到,只能通过递归方式计算,但如果仅需要左子树的值或者右子树的值就可以得到结果,此时就可以使用Morris算法。使用Morris算法的优势是空间复杂度为1,面试加分。

  4. Morris解题技巧:利用Morris解题,可以分局部根节点处理、局部根节点的左子树处理、局部根节点的右子树处理(这个麻烦一些,需要涉及反转问题)。Morris算法中判断局部根节点左子树的关键地方是第二次回到某节点时的情况,第二次回到的节点就是局部根节点,往回跳到局部根节点的那个节点就是局部根节点中左树中最右边的节点。

  5. 线段树解题的场景:问题可以转化为:整体区域范围已知,在某段区域范围上进行统计、查询、集体设定为某值等等时,可以使用线段树解题。解题优势,时间复杂度为O(log N)级别的。

  6. 线段树解题步骤:1)首先,将所有点进行离散化,因为有时会由于数值比较大导致占用很多的空间,所以将所有点进行统计、排序、重新标号,以后不再适用原数据值,而是采用标号值进行处理。2)建立线段树,确定线段树中的变量及参数,参数是指线段树的大小(即最大标号值大小),变量是指线段树中用到的变量数组,例如懒标记数组、待更新值记录数组、待更新值是否更新数组、累加和数组等等。3)根据业务逻辑修改线段树中的查询、更新等操作,逻辑框架不变,主要是修改其中对线段树变量的处理部分,根据逻辑业务选择合适的变量进行处理。

其他树

B+树

红黑树

AVL/平衡二叉树

Trie树(字典树、前缀树)

AVL/平衡二叉树

参考资料:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值