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 是不是为空,执⾏第⼆步循环。

京公网安备 11010502036488号