二叉树的层序遍历

96 阅读1分钟

BFS

广度遍历常与Queue合用,将root节点放进queue中,在shift出来,并将当前节点的左右节点放进res中。并在每个while循环中在res中加入新的数组。

var levelOrder = function(root) {
//声明一个数组来保存结果
const res = [];
const q = [];
q.push(root);
if(!root) retrn false;
while(!q.length){
let size = q.length;
for(let i = 0; i < size; i++){
const node = q.shift();
res[res.length - 1].push(node.val);
if(node.left) q.push(node.left);
if(node.right) q.push(node.right)
}
}
return res;
};

DFS

深度优先算法采用的递归的方式。

var levelOrder = function(root) {
//声明一个数组存放结果
const res = [];
if(!root) return res;
dfs(root, res, 0)
return res
};
function dfs(node, result, level){
if(node == null) return;
if(level > result.length){
res.push([]);
}
res[level].push(node,val);
if(node.left) dfs(node.left, result, level + 1);
if(node.right) dfs(node.right, result, level + 1);
}