【leecode 劍指 Offer】從上到下列印二叉樹 III
阿新 • • 發佈:2020-12-27
從上到下列印二叉樹 III
題目
請實現一個函式按照之字形順序列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右到左的順序列印,第三行再按照從左到右的順序列印,其他行以此類推。
示例
例如:
給定二叉樹: [3,9,20,null,null,15,7],
返回其層次遍歷結果:
解題思路
演算法流程:
- BFS 迴圈: 迴圈列印奇 / 偶數層,當 queue 為空時跳出;
- 列印奇數層: 從左向右 列印,先左後右 加入下層節點;
- 若 queue 為空,說明向下無偶數層,則跳出;
- 列印偶數層: 從右向左 列印,先右後左 加入下層節點;
演算法實現
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number[][]}
*/
var levelOrder = function(root) {
// 當子樹為空時返回空
if(!root){
return [];
}
// 記錄結果
let res = [];
// 記錄每層節點數
let tmp = [];
// 輔助佇列
let queue = [root];
// 單雙層標記
let flag =true;
// 當輔助佇列不為空時遍歷
while(queue.length !==0) {
//清空臨時陣列列表
tmp = []
// 記錄當層節點數量
var length =queue.length;
// 遍歷當層節點
while(length--){
let first = queue.shift();
tmp.push(first.val);
if(first.left){
queue.push(first.left)
}
if(first.right){
queue.push(first.right)
}
}
// 當層數為單層時壓入結果中,否則翻轉後壓入結果中
if(flag){
res.push(tmp)
}else{
res.push(tmp.reverse())
}
// 層數單雙切換
flag=!flag;
}
// 返回結果
return res;
};