将一个二叉树层次遍历,返回一个用数组存储的链表。
没什么其他方法,直接上层次遍历代码就行。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode[] listOfDepth(TreeNode tree) {
if(tree==null)return new ListNode[]{};
List<TreeNode> queue = new LinkedList<>();
List<ListNode> ans = new ArrayList<>();
queue.add(tree);
/*节点head表示为每行链表的虚拟头节点
*这样就不需要在每个while循环先处理第一个节点
*/
ListNode head = new ListNode(0);
while(queue.size()>0){
int size = queue.size();
ListNode temp = head;
for(int i=0;i<size;i++){
TreeNode nodeTemp = queue.remove(0);
temp.next = new ListNode(nodeTemp.val);
if(nodeTemp.left!=null)queue.add(nodeTemp.left);
if(nodeTemp.right!=null)queue.add(nodeTemp.right);
temp = temp.next;
}
ans.add(head.next);
}
return ans.toArray(new ListNode[]{});
}
}
最后成功通过。