官方题解采用了while循环队列的方式,我们来试试递归吧
首先让我们看看二叉树先序打印的代码
// 先序打印所有节点
public static void pre(TreeNode head) {
if (head == null) {
return;
}
System.out.println(head.value);
pre(head.left);
pre(head.right);
}
我们定义一个level来代表加入第几个集合,代码由二叉树先序打印修改而来
代码:
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> list = new ArrayList<>();
viewNode(root,0,list);
return list;
}
public void viewNode(TreeNode node, int level,List<List<Integer>> list ) {
if (node == null) {
return;
}
List<Integer> levelList ;
if(list.size()<level+1) {
levelList = new ArrayList<>();
list.add(levelList);
}else {
levelList = list.get(level);
}
levelList.add(node.val);
viewNode(node.left,++level,list);
viewNode(node.right,level,list);
}