Java实现二叉树层序遍历打印:从剑指offer到LeetCode

版权申诉
0 下载量 36 浏览量 更新于2024-08-08 收藏 16KB DOCX 举报
在Java编程中,二叉树层序遍历是一种常见的树结构遍历方法,它按照树的层次顺序访问节点,即先遍历第一层,再遍历第二层,以此类推,直到所有节点都被访问。题目中的两段代码分别针对不同的返回类型进行了解释。 首先,对于"基于Java的二叉树层序遍历打印实现 - 剑指offer32-Ⅰ",这里采用的是一个简单的单向列表(LinkedList)作为队列来辅助遍历。`Solution`类的`levelOrder`方法接收一个`TreeNode`类型的参数`root`,表示二叉树的根节点。如果根节点为空,直接返回一个空的整型数组。初始化一个队列`q`并将根节点添加进去。接着,用一个`List<Integer>` `list`存储遍历过程中的节点值。在`while`循环中,不断从队列中取出节点,将其值添加到`list`中,并将该节点的左右子节点(如果存在)加入队列。遍历完成后,将`list`转换为一维数组`res`并返回。 代码的关键点在于使用队列的先进先出(FIFO)特性,确保了按照层序的顺序进行遍历。当遍历到某一层的所有节点后,才移动到下一层。 第二个实现是"二叉树层序遍历Ⅱ - 剑指offer32-Ⅱ/LeetCode102",这里的返回类型变成了`List<List<Integer>>`,即每个元素代表一个层级的节点值,整个列表则包含了所有层级。这个版本的代码与第一个版本的主要区别在于,遍历时创建了一个新的`List<Integer>` `list`来保存当前层级的节点值,然后将这个`list`添加到结果列表`res`中,而不是直接将`list`的值存入`res`。这样做是为了适应返回多维列表的需求,保持每个层级的独立性。 总结来说,二叉树层序遍历的核心在于维护一个队列来控制遍历顺序,通过不断取出队首节点、添加子节点并更新结果列表,实现了从上到下、从左到右的节点值遍历。这两个示例展示了Java中如何根据问题需求调整返回数据结构,使得算法适应不同场景。无论是返回一维数组还是二维列表,层序遍历的基本逻辑都是相同的,只是数据组织形式有所变化。