输入[1,2,3,4,5]
输出[[1],[2,3],[4,5]] (按照一层输出为一组)
思路:
使用队列,在队列内层再加入一层for循环,每层的个数就是队列中当前队列的个数。
python:
from collections import deque
class Solution(Object):
def levelOrder(self, root):
if not root:
return []
result = []
que = deque() # 建立一个队列
que.append(root)
while que:
# 假设第一次队列中个数为一个,for循环之后,那么第二次队列中的个数就是2,第三次队列中的个数就是2。。。以此类推。
level = [] # 每层进行一个存储
for _ in range(len(que)): # 根据队列中的数量确定循环此时,其实队列中的数量就是本层的要加入level中,=那一层的节点数。
node = que.popleft() # 每次都是先出队
level.append(node.val) # 加入到level中
if node.left:
que.append(node.left)
if node.right:
que.append(node.right)
result.append(level)
return result
JavaScrip:
class Solution{
levelOeder(root){
if(!root){
return [];
}
const result = [];
const queue = [];
queue.push(root);
while(queue.length > 0){
const level = [];
const size = queue.length; // 这里在js中注意要提前获取队列长度信息,如果直接写在下边for循环中的话会导致长度一直改变问题
for (let i = 0; i < size; i++ ) {
const node = queue.length;
level.push(node.val);
if(node.left){
queue.push(node.left);
}
if(node.right){
queue.push(node.right);
}
}
result.push(level);
}
return result;
}
}