行数 m 应当等于给定二叉树的高度。 列数 n 应当总是奇数。 根节点的值(以字符串格式给出)应当放在可放置的第一行正中间。根节点所在的行与列会将剩余空间划分为两部分(左下部分和右下部分)。你应该将左子树输出在左下部分,右子树输出在右下部分。左下和右下部分应当有相同的大小。即使一个子树为空而另一个非空,你不需要为空的子树输出任何东西,但仍需要为另一个子树留出足够的空间。然而,如果两个子树都为空则不需要为它们留出任何空间。 每个未使用的空间应包含一个空的字符串""。 使用相同的规则输出子树。 示例
/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right) * } */ /** * @param {TreeNode} root * @return {string[][]} */ var printTree = function (root) { /* m:二叉树的高度 n:列树,总是奇数
看来是递归的构建 */
const queue = [root];
let m = 0;
while (queue.length > 0) { let size = queue.length; for (let i = 0; i < size; i++) { let node = queue.shift(); if (node.left) queue.push(node.left); if (node.right) queue.push(node.right); } m++; }
const n = 2 ** m - 1;
const result = newArray(m);
for (let i = 0; i < m; i++) { result[i] = newArray(n).fill(""); }