二叉树关于行的相关操作技巧

199. 二叉树的右视图

103. 二叉树的锯齿形层序遍历

107. 二叉树的层序遍历 II

515. 在每个树行中找最大值

662. 二叉树最大宽度

 

本篇文章主要是二叉树关于「行」操作技巧的相关总结

自己也是写了两个类似的题目,首先是根据自己的惯性思维求解,但是最后对比其他人的解法后,发现了一些隐藏 (自己不知道的) 的技巧

众所周知,对行操作最基本的方法就是「层次遍历」,维护一个队列存储每一行的节点。基本上很多题目都可以利用层次遍历的变形求解

如:二叉树的右视图二叉树的锯齿形层序遍历二叉树的层序遍历 II 等等

但是本篇文章要介绍的是另外两个题目:在每个树行中找最大值二叉树最大宽度。分别会使用「惯性思维 (层序遍历)」和「隐藏技巧 (递归遍历)」两种方法解决

层序遍历求解

这两个题目的共同点都是计算每一行的某些属性,如:每行中最大值、所有行中的最大宽度。根据惯性思维,很容易想到利用层次遍历求解

在每个树行中找最大值

题目详情可见 在每个树行中找最大值

二叉树最大宽度

题目详情可见 二叉树最大宽度

递归求解

下面介绍一种递归的解法,并且引入了「深度」的概念

介绍递归解法前,先介绍一下树的深度。相信大家对于如何求树的深度已经了如指掌,不确定的可以先去写一下 二叉树的最大深度二叉树的最小深度

下面给出「带着深度信息」的遍历框架,这个是很有用的,因为很多处理行问题的时候都需要根据深度判断元素是否属于同一行

在每个树行中找最大值

题目详情可见 在每个树行中找最大值

二叉树最大宽度

题目详情可见 二叉树最大宽度

到此为止,完美收官!!!哈哈哈哈哈哈