题目描述:
解题思路:
通过题目,我们可以发现这是一个广度优先搜索。而实现广度优先搜索,最好的就是使用队列。首先因为我们不知道元素的个数,无法定义数组的长度,所以我们使用一个集合list来存放索引值。通过一个while循环,当队列不为空时,我们不断把当前层的元素加到list中,然后把它的子节点加到队列里。最后通过for循环,再把list里面的索引值放到数组里就好啦。
代码实现:
class Solution {
public int[] levelOrder(TreeNode root) {
if(root==null) return new int[0];
List<Integer> list=new ArrayList<>();
Queue<TreeNode> queue=new LinkedList<TreeNode>();
queue.offer(root);
while(!queue.isEmpty()){
TreeNode tree=queue.poll();
if(tree.left!=null)
queue.offer(tree.left);
if(tree.right!=null)
queue.offer(tree.right);
list.add(tree.val);
}
int[] total=new int[list.size()];
for(int i=0;i<list.size();i++){
total[i]=list.get(i);
}
return total;
}
}
执行结果: