102.二叉树的层序遍历:
var levelOrder = function(root) {
var result = []; // 用于存放最终结果
var recursion = function (node, level, result){ // 递归函数
if(!node) return null; // 如果节点为空,结束当前递归
if(level === result.length) result.push(new Array()); // 如果层level和result数组的长度相同,需要往数组里添加一个空数组,用于存放当前层的节点值
result[level].push(node.val); // 往当前层数组里添加节点值
recursion(node.left, level + 1, result); // 递归遍历左右子树,值得注意的是子树的level应该是当前level+1(下一层)
recursion(node.right, level + 1, result);
}
recursion(root, 0, result); // 执行第一次递归
return result; // 返回结果
};
103.二叉树的锯齿形层序遍历
var zigzagLevelOrder = function(root) { // 代码和上一题基本一样
var result = [];
var recursion = function (node, level, result){
if(!node) return null;
if(level === result.length) result.push(new Array());
if(level % 2 === 0) result[level].push(node.val); // 偶数层尾部添加
if(level % 2 === 1) result[level].unshift(node.val); // 奇数层头部添加,即可实现一个奇数层翻转的效果
recursion(node.left, level + 1, result);
recursion(node.right, level + 1, result);
}
recursion(root, 0, result);
return result;
};
107.二叉树的层序遍历 II
var levelOrderBottom = function(root) {
var result = [];
var recursion = function (node, level, result){
if(!node) return null;
if(level === result.length) result.push(new Array());
result[level].push(node.val);
recursion(node.left, level + 1, result);
recursion(node.right, level + 1, result);
}
recursion(root, 0, result);
for(var i = 0, j = result.length - 1; i < j; i++, j--){ // 在结果数组中将数组翻转
[result[i], result[j]] = [result[j], result[i]];
}
return result;
};
429.N 叉树的层序遍历
var levelOrder = function(root) {
var result = [];
var recursion = function (node, level, result){
if(!node) return null;
if(level === result.length) result.push(new Array());
result[level].push(node.val);
for(var child of node.children){ // N叉树遍历子树(对应二叉树就是遍历左右子树)
recursion(child, level + 1, result);
}
}
recursion(root, 0, result);
return result;
};
本人师从开课吧胡光胡船长,短短一个月,从算法小白到leetcode200题,真的爽。 此次刷题打卡用的都是递归的方法,递归写代码就是舒服,简洁,一个字爽!今天的打卡刷题就到这里啦,欢迎点赞评论~