Javascript 打印二叉树递归函数

Javascript 打印二叉树递归函数,javascript,binary-tree,Javascript,Binary Tree,我试图返回一个表示二叉树的数组数组。我创建了一个由空字符串数组填充的输出数组,其中每个数组表示树的一个级别,字符串表示该级别上的每个可能节点位置。出于某种原因,递归函数似乎正在更改父输出数组中的所有数组,而不仅仅是相应的数组 var printTree = function(root) { //first find depth of tree let depth = 0 const findDepth = (node, level) => { depth =

我试图返回一个表示二叉树的数组数组。我创建了一个由空字符串数组填充的输出数组,其中每个数组表示树的一个级别,字符串表示该级别上的每个可能节点位置。出于某种原因,递归函数似乎正在更改父输出数组中的所有数组,而不仅仅是相应的数组

var printTree = function(root) {
//first find depth of tree
    let depth = 0
    const findDepth = (node, level) => {
        depth = Math.max(depth, level);
        if (node.left) {
            findDepth(node.left, level + 1)
        }
        if (node.right) {
            findDepth(node.right, level + 1)
        }
    }
    findDepth(root, 1);
    let width = 1 + ((depth - 1) * 2)
//create array of arrays filled with blanks that match height and width
// of given tree
    let output = new Array(depth).fill(new Array(width).fill(''));
    let mid = Math.floor(width / 2);
//do DFS through tree and change output array based on position in tree
    const populate = (node, level, hori) => {
        output[level][hori] = node.val;
        if (node.left) {
            populate(node.left, level + 1, hori - 1);
        }
        if (node.right) {
            populate(node.right, level + 1, hori + 1);
        }
    }
    populate(root, 0, mid);
    return output;
};
如果我放入一个二叉树,其根节点的val为1,其唯一的子节点的val为2

我的输出数组应该是:

[['', 1 , ''],
[2 , '' , '']]
但实际上它看起来是这样的:

[[2, 1, ''],
[2, 1, '']]
我已将递归调用记录在控制台中,我无法理解为什么在矩阵的所有行中进行这些更改,而不仅仅是在适当的级别


如何解决此问题?

您需要更改此行

let output = new Array(depth).fill(new Array(width).fill(''));
//                                 ^^^^^^^^^^^^^^^^^^^^^^^^^ same array!
进入


因为您使用相同的数组填充数组。下划线部分填充相同的数组,一个常量值。

看起来,您使用的是相同的对象引用,而不是更深层次的新数组。请为问题和想要的输出添加一些输入。
let output = Array.from({ length: depth }, _ => Array.from({ length: width }).fill(''));