public List<ListNode> binaryTreeToLists(TreeNode root) {
List<ListNode> res = new ArrayList<>();
if (root == null) return res;
Queue<TreeNode> q = new LinkedList<>();
q.add(root);
while (!q.isEmpty()) {
int size = q.size();
ListNode head = null;
ListNode curr = null;
for (int i = 0; i < size; i++) {
TreeNode tmp = q.poll();
ListNode lvlNode = new ListNode(tmp.val);
if(head == null){
head = lvlNode;
curr = lvlNode;
}else{
curr.next = lvlNode;
curr = curr.next;
}
if (tmp.left != null) q.add(tmp.left);
if (tmp.right != null) q.add(tmp.right);
}
res.add(head);
}
return res;
}