先层序遍历,然后按行进行数组反转
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
function Print(pRoot) {
// write code here
let ans = [];
// 层序遍历函数
function levelOrder(node, ans) {
if (node == null) {
return ans;
}
// 第一层
ans.push([node.val]);
// 定义遍历的节点队列
let query = [];
if (node.left) {
// 向队列中添加左节点
query.push({ node: node.left, level: 1 });
}
if (node.right) {
// 向队列中添加右节点
query.push({ node: node.right, level: 1 });
}
while (query.length) {
// 取出队列第一个节点
let cur = query[0];
// 弹出第一个节点
query = query.slice(1);
// console.log("query:", query);
// console.log("cur:", cur);
let level = cur.level;
// 判断ans数组当前层是否有数据
if (ans[level]) {
// 有数据,则直接数组追加即可
ans[level].push(cur.node.val);
} else {
// 没有数据,则需要初始化数组
ans[level] = [cur.node.val];
}
if (cur.node.left) {
// 向队列中添加左节点
query.push({ node: cur.node.left, level: level + 1 });
}
if (cur.node.right) {
// 向队列中添加右节点
query.push({ node: cur.node.right, level: level + 1 });
}
}
}
levelOrder(pRoot, ans);
let len = ans.length;
for (let i = 0; i < len; ++i) {
if (i % 2 == 1) {
// 奇数行数组反转
let temp = [...ans[i]];
let n = ans[i].length;
for (let j = 0; j < n; ++j) {
ans[i][j] = temp[n - 1 - j];
}
}
}
return ans;
}
module.exports = {
Print: Print
};

京公网安备 11010502036488号