从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印
// BFS
// 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
var levelOrder = function(root) {
if(root == null) return []
var queue = []
queue.push(root)
var res = []
// 当队列还有元素时就继续遍历
// 先将根元素放入遍历
while(queue.length){
// 将头元素拿出来遍历
var key = queue.shift()
// 遍历到的元素加入数组中
res.push(key.val)
// 如果有左节点就放进去遍历
if(key.left){
queue.push(key.left)
}
// 如果有右节点就放右节点遍历
if(key.right){
queue.push(key.right)
}
}
return res
};
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
if(root == null) return []
let count = 0; //当前的层数
let list = [root];
let result = []; // 最终的结果
while(list.length){
if(!root) return [];
result[count] = []; // 第count层的结果
let countNum = list.length; // 第count层的节点数
while(countNum --){
let temp = list.shift();
result[count].push(temp.val);
if(temp.left) list.push(temp.left);
if(temp.right) list.push(temp.right);
}
// 当为奇数时就反转结果
if(count%2){
result[count].reverse();
}
count++;
}
return result;