之字形打印二叉树
Posted 前端你好
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了之字形打印二叉树相关的知识,希望对你有一定的参考价值。
题目:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
例子:
输入二叉树
输出结果
6
8 4
3 5 7 9
分析:这个题和上个题一样,直接使用广度优先遍历,只是需要在获取的数组中判断层数,将偶数层的二维元素反向排序就可以了。
解:
var levelOrder = function(root) {
if(!root){
return [];
}
//根节点root和层数0
const queue = [[root, 0]], res = [];
while(queue.length){
const [node, level] = queue.shift();
if(!res[level]){ //判断当前层是否初始化
res[level] = [];
}
res[level].push(node.val); //各层的元素
node.left && queue.push([node.left, level + 1]); //下一层的元素
node.right && queue.push([node.right, level + 1]); //下一层的元素
}
for(let i = 0;i <= res.length - 1; ++i){ //遍历数组的一维下标
if((i+1) % 2 === 0){ //由于数组是从0开始,所以0+i与2取余可知层数是否为偶
res[i].reverse(); //满足条件层数的二维数组反向排序
}
}
return res;
};
长按关注我吧
以上是关于之字形打印二叉树的主要内容,如果未能解决你的问题,请参考以下文章