# 题目1-不分行从上到下打印
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
# 思路
- 在打印第一行时,将左孩子节点和右孩子节点存入一个队列里
- 队列元素出队列打印,同时分别将左孩子节点和右孩子节点存入队列
- 这样打印二叉树的顺序就是没行从左到右打印
# 代码
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;
}
@前端进阶之旅: 代码已经复制到剪贴板
# 题目2-把二叉树打印成多行
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
# 思路
- 使用一个队列存储当前层遍历的节点
- 使用两个变量来标记当前遍历的状态
- currentNums:当前层剩余的节点数
- childNums:孩子节点数
- 当前层遍历完成后开始遍历孩子节点,currentNums赋值为childNums,childNums赋值为0,
# 代码
function Print(root) {
const result = [];
const queue = [];
let tempArr = [];
let currentNums = 1;
let childNums = 0;
if (root) {
queue.push(root);
while (queue.length > 0) {
const current = queue.shift();
if (current.left) {
queue.push(current.left);
childNums++;
}
if (current.right) {
queue.push(current.right);
childNums++;
}
tempArr.push(current.val);
currentNums--;
if (currentNums === 0) {
currentNums = childNums;
childNums = 0;
result.push(tempArr);
tempArr = [];
}
}
}
return result;
}
