1、题目描述
【JZ60】从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
知识点:二叉树,队列
难度:☆
2、解题思路
这道题是解决很多二叉树按行遍历的基础,最简便的方法就是使用队列(FIFO),首先把第一层保存到队列,然后处理第一层的结点,在处理每一层的每一个节点时后,还把该节点的左右子结点入队,然后把处理好的节点出队。于是,当处理完一层节点后,队列里的元素刚好就是下一层要处理的节点。
3、解题代码
package pers.klb.jzoffer.medium;
import pers.klb.jzoffer.simple.TreeNode;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
/**
* @program: JzOffer2021
* @description: 把二叉树打印成多行
* @author: Meumax
* @create: 2020-06-19 15:14
**/
public class PrintBinaryTree {
public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
if (pRoot == null) {
return new ArrayList<>();
}
ArrayList<ArrayList<Integer>> lists = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.add(pRoot);
while (!queue.isEmpty()) {
ArrayList<Integer> list = new ArrayList<>();
int size = queue.size();
while (size != 0) {
TreeNode node = queue.poll();
list.add(node.val);
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
size--;
}
lists.add(list);
}
return lists;
}
}
4、解题心得
这种题型应该不会在笔试出现,属于基础题型,很多难题进行拆解后可以利用本题方法解答。