本系列是《剑指offer》或leetcode的JavaScript版本。 每期1-2个算法,也有可能是一个类别。 文章包括题目、思路以及代码。
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
function PrintFromTopToBottom(root) { const result = []; const queue = []; if (root) { queue.push(root); while (queue.length > 0) { const current = queue.shift(); if (current.left) { queue.push(current.left); } if (current.right) { queue.push(current.right); } result.push(current.val); } } return result; }
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
奇数从左到右,偶数从右到左
和上面的题目类似,同样可以借助在打印一层的时候填充下一层的方法
function Print(root) { const result = []; const oddStack = []; const evenStack = []; let temp = []; if (root) { oddStack.push(root); while (oddStack.length > 0 || evenStack.length > 0) {
while (oddStack.length > 0) { const current = oddStack.pop(); temp.push(current.val); if (current.left) { evenStack.push(current.left); } if (current.right) { evenStack.push(current.right); } } if (temp.length > 0) { result.push(temp); temp = []; }
while (evenStack.length > 0) { const current = evenStack.pop(); temp.push(current.val); if (current.right) { oddStack.push(current.right); } if (current.left) { oddStack.push(current.left); } } if (temp.length > 0) { result.push(temp); temp = []; }
} } return result; }