使用 Javascript 的二叉树级顺序遍历

win*_*ere 5 javascript binary-tree breadth-first-search multidimensional-array

这是一个leetcode问题。

给定一棵二叉树,返回其节点值的层序遍历。(即从左到右,逐级)。

例如:给定二叉树[3, 9, 20, null, null, 15, 7]

    3
   / \
  9  20
    /  \
   15   7
Run Code Online (Sandbox Code Playgroud)

返回其层序遍历为:

[
  [3],
  [9,20],
  [15,7]
]
Run Code Online (Sandbox Code Playgroud)

但我正在 JavaScript 中尝试一种新的方式,而不是完全按照他们的解决方案。到目前为止,我能够打印数组,但是

如何在新行中打印不同的级别

以下是我到目前为止的代码:

var levelOrder = function(root) {
let output = [];
let queue = [];
let currentNode = root;
queue.push(currentNode);
let currentLevel = 1;
while(queue.length){
    
    currentNode = queue.shift();
    currentLevel--; //this will ensure we are adding new lines only on next level
    output.push(currentNode);
    
    if(currentNode.left){
        queue.push(currentNode.left);
    }
    if(currentNode.right){
        queue.push(currentNode.right);
    }
    
    if(currentLevel = 0){
        output = output + '/n'; //Insert a new line
        currentLevel = queue.length; //2
    }
}
return output;
};
Run Code Online (Sandbox Code Playgroud)

输入:[3,9,20,null,null,15,7],

Expected Output:
[
[3],
[9,20],
[15,7]
]
Run Code Online (Sandbox Code Playgroud)

本文给出了问题的链接: BinaryTreeTraversalUsingBFS

Emm*_*mma 9

我想你已经快到了。但不确定output = output + '/n';是做什么用的。

这会通过:

var levelOrder = function(root) {
    const levels = []

    if(!root) {
        return levels
    }

    const queue = [root]
    while (queue.length){
       const queueLength = queue.length
       const level = []

       for(let i = 0; i < queueLength; i++){

           const node = queue.shift()

           if(node.left){
               queue.push(node.left)
           }
           if(node.right){
               queue.push(node.right)
           }

           level.push(node.val)
       }
       levels.push(level)
   }
    return levels
}
Run Code Online (Sandbox Code Playgroud)

参考

  • 有关更多详细信息,您可以查看讨论区。其中有大量公认的解决方案,具有多种语言解释、高效算法以及渐近时间/空间复杂度分析1 , 2