Javascript与Python中的递归深度优先搜索

Javascript与Python中的递归深度优先搜索,javascript,python,algorithm,data-structures,depth-first-search,Javascript,Python,Algorithm,Data Structures,Depth First Search,所以我在AlgoExpert上做算法问题,我遇到了一个递归DFS算法。最初我尝试用JavaScript解决这个问题,但遇到了一些问题。当我看着代码遍历时,我发现解决它的方法非常简单 以下是Python解决方案: def depthFirstSearch(self,数组): array.append(self.name); 对于在self.children中的children: depthFirstSearch(数组); 返回数组 我的问题是,如何在JavaScript中实现同样的功能?我试着做

所以我在AlgoExpert上做算法问题,我遇到了一个递归DFS算法。最初我尝试用JavaScript解决这个问题,但遇到了一些问题。当我看着代码遍历时,我发现解决它的方法非常简单

以下是Python解决方案:

def depthFirstSearch(self,数组):
array.append(self.name);
对于在self.children中的children:
depthFirstSearch(数组);
返回数组
我的问题是,如何在JavaScript中实现同样的功能?我试着做:

函数depthFirstSearch(数组){
array.push(this.name);
for(设i=0;i
我一直收到一个错误:

未定义depthFirstSearch

当我试图递归调用函数本身时,我不明白为什么会在JavaScript中出现错误

以下是完整的代码片段:

类节点{
建造师(姓名){
this.name=名称;
这是:children=[];
}
addChild(姓名){
this.children.push(新节点(名称));
归还这个;
}
深度优先搜索(数组){
/*
*步骤1:将根节点添加到数组中
*this.name是起始处的根
*步骤2:检查左侧子节点是否为空
*步骤3:如果左子节点不为null,则将左子节点添加到数组中
*步骤4:如果左侧子节点为空,则检查右侧子节点
*步骤5:如果正确的子节点不为null,则将正确的子节点添加到数组中
*步骤6:重复步骤1-5,直到没有要检查的节点
*/
array.push(this.name);
const children=this.children;
for(设i=0;i
几个问题:

  • depthFirstSearch
    Node
    类的方法,不是全局函数,因此应该在节点实例上调用它。例如,如果您有一个名为
    child
    的节点,那么应该像
    child.depthFirstSearch

  • 由于它是一种方法,因此不应使用
    函数
    关键字(在
    构造中)。这已在问题中的最后一个代码块中正确删除

  • 传递给
    depthFirstSearch
    的参数应该是一个数组,但传递给它的
    array[i]
    是一个节点。它应该只是
    数组
    ,就像Python代码一样

  • 循环不应位于
    数组
    之上,而应位于当前节点的子节点之上,即位于
    this.children
    之上。因此,在
    for
    循环中有
    i

其他一些评论:

  • 循环的
    之后不需要分号。添加它实际上会引入一个(无害的)空语句
  • 使用
    for..of
    而不是一个普通的
    for
    循环可以使代码稍微短一点,并且更好地模仿Python代码的功能
更正版本:

类节点{
/*…另一个代码*/
深度优先搜索(数组){
array.push(this.name);
为了(让这个孩子,孩子们){
depthFirstSearch(数组);
}
返回数组;
}
}

随机思维,但您是否尝试调用
this.depthFirstSearch(数组[i])
?由于函数是在类中定义的,因此仅调用
depthFirstSearch
是无法访问的。请查看函数的范围,然后查看如何引用相同的方法class@ImranAhmed我确实试过使用
这个.depthFirstSearch(数组[I])
,它说数组没有定义。谢谢!这起作用了。我忘记了JS中的
循环,所以谢谢你的复习。同时,感谢您扩展我对JS的了解!