给你二叉树的根节点 root
,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。
例如:输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
原题:力扣 102 题
一般来说,二叉树层序遍历都是使用广搜的方法,但今天偶然听闻部分企业面试时要求使用递归来做,故在此记录一下递归版。
一、递归版:使用深度优先搜索方法
//深搜 dfs
var levelOrder = function(root) {
const res = [];
dfs(root, 0);
return res;
function dfs(root, depth) {
//节点为空值,结束递归
if(root == null) return;
//当结果数组长度不足,无法放入新节点时,增加空数组
if(res.length <= depth) res.push([]);
//根据深度将节点放入相应数组
res[depth].push(root.val);
//每次深搜将深度加一
dfs(root.left, depth + 1);
dfs(root.right, depth + 1);
}
};
二、非递归版:使用广度优先搜索方法
//广搜 bfs
var levelOrder = function(root) {
const res = [];
if(root == null) return res;
bfs(root, res);
return res;
function bfs(root, res) {
const q = [];
q.push(root);
while(q.length != 0) {
res.push([]);
const currentLength = q.length;
for(let i = 0; i < currentLength; i++) {
//弹出队头节点
const node = q.shift();
res[res.length - 1].push(node.val);
if(node.left != null) q.push(node.left);
if(node.right != null) q.push(node.right);
}
}
}
};