把二叉树打印成多行

tech2025-11-17  1

把二叉树打印成多行

1、参考资料

https://www.nowcoder.com/practice/445c44d982d04483b04a54f298796288

2、题目要求

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

3、代码思路

队列解决广度优先问题~~~

题目要求我们返回一个 ArrayList<ArrayList<Integer>> 对象,外层的 ArrayList 对应着二叉树的每一层,内层的 ArrayList 存储着每一层节点的数据我们将每一层的节点压入 queue 中,通过 queue.size() 方法可获取本层节点的个数,我们使用 for 循环遍历本层的所有节点,将本层节点的值添加至 ArrayList 中,并将下一层的节点添加至 queue 中

4、代码实现

代码

class Solution { public ArrayList<ArrayList<Integer>> levelOrder(TreeNode pRoot) { // 外层的 ArrayList 对应着二叉树的每一层,内层的 ArrayList 存储着每一层节点的数据 ArrayList<ArrayList<Integer>> levelOrder = new ArrayList<>(); // Guard safe if (pRoot == null) { return levelOrder; } // 创建队列,并将根节点入队 LinkedList<TreeNode> queue = new LinkedList<>(); queue.add(pRoot); // 队列不为空,则代表本层还有节点 while (queue.isEmpty() == false) { int curLevelCount = queue.size(); // 本层节点的个数 levelOrder.add(new ArrayList<>()); // 初始化内层的 ArrayList 对象 // 遍历本层的所有节点 for (int i = 0; i < curLevelCount; i++) { // 从队列中移除 TreeNode curNode = queue.remove(); // 添加至 ArrayList levelOrder.get(levelOrder.size() - 1).add(curNode.val); // 添加左节点至队列中 if (curNode.left != null) { queue.add(curNode.left); } // 添加右节点至队列中 if (curNode.right != null) { queue.add(curNode.right); } } } return levelOrder; } } class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } }
最新回复(0)