题解 | #把二叉树打印成多行#
把二叉树打印成多行
https://www.nowcoder.com/practice/445c44d982d04483b04a54f298796288
import java.util.ArrayList; import java.util.LinkedList; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> results = new ArrayList<>(); LinkedList<TreeNode> nodes = new LinkedList<>(); if (pRoot != null) { nodes.add(pRoot); while (!nodes.isEmpty()) { ArrayList<Integer> integers = new ArrayList<>(); int size = nodes.size(); for (int i = 0; i < size; i++) { TreeNode node = nodes.poll(); integers.add(node.val); if (node.left != null) { nodes.add(node.left); } if (node.right != null) { nodes.add(node.right); } } if (!integers.isEmpty()) { results.add(integers); } } } return results; } }
解题思想:
* 1. 借助双向链表,先将根节点添加进去:
* 2. 获取 list ⾥⾯剩下的元素的个数,挨个取出就是⼀层,取出的时候,添加到当前层的 list 结果集中,然后判断每⼀个取出来的节点的左右节点是不是为空,不为空则加⼊链表。(按照层次遍历的时候需要按照 size 来循环)
* 3. 每⼀层处理完之后,将 list 加⼊结果集中,继续判断 list 是不是为空,执⾏第⼆步循环。
#算法##算法笔记#