活动地址:
CSDN21天学习挑战赛
前面我们回顾了关于二叉树的深度优先遍历的知识,接下来我们再来介绍二叉树的另一种遍历方式:层序遍历。
…
102. 二叉树的层序遍历
题目描述:给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。
这种遍历的方式和我们之前学习的都不太一样。
需要借用一个辅助数据结构即队列来实现,
队列先进先出,符合一层一层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑
。
而这种层序遍历方式就是图论中的广度优先遍历,只不过我们应用在二叉树上。
使用队列实现二叉树广度优先遍历,代码如下:
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number[][]}
*/
var levelOrder = function(root) {
let res=[]
if(!root) return res
let queue=[root]
while(queue.length){
let arr=[]
let len=queue.length
for(let i=0;i<len;i++){
let node=queue.shift()
arr.push(node.val)
node.left&&queue.push(node.left)
node.right&&queue.push(node.right)
}
res.push(arr)
}
return res
};
这算是层序遍历问题的万能模板了,掌握以后我们就能解决这些问题
104. 二叉树的最大深度
107. 二叉树的层序遍历 II
111. 二叉树的最小深度
116. 填充每个节点的下一个右侧节点指针
117. 填充每个节点的下一个右侧节点指针 II
199. 二叉树的右视图