返回未定义的Javascript递归函数

返回未定义的Javascript递归函数,javascript,recursion,undefined,Javascript,Recursion,Undefined,我甚至不确定这个问题的标题应该是什么——我不确定到底出了什么问题 我正在写一个函数,它只是在二叉树中循环。假设我们有一个简单的树,例如: testTree = { data: 5, left: { data: 10, left: undefined, right: undefined }, right: { data: 2, left: undefined, right: undefined } } 我们试

我甚至不确定这个问题的标题应该是什么——我不确定到底出了什么问题

我正在写一个函数,它只是在二叉树中循环。假设我们有一个简单的树,例如:

testTree = { 
  data: 5,
  left: { 
    data: 10, 
    left: undefined, 
    right: undefined 
  },
  right: { 
    data: 2, 
    left: undefined, 
    right: undefined 
  } 
}
我们试图从中收集数据,从最左边的路径开始。以下是“左搜索”功能:

function searchLeft(node, path){
  if(typeof node.left == 'undefined'){
    console.log(path);
    return path;
  }
  node = JSON.parse(JSON.stringify(node.left));
  path.push(node.data);
  searchLeft(node,path);
}
运行时,内部console.logpath显示正确的值:

[10]

但是如果我

console.log(searchLeft(testTree,[]));
我明白了

未定义

为什么函数不能正确返回[10]


谢谢大家!

递归调用必须将值返回给调用方

function searchLeft(node, path) {
    if (typeof node.left == 'undefined') {
        console.log(path);
        return path;
    }
    node = JSON.parse(JSON.stringify(node.left));
    path.push(node.data);
    return searchLeft(node, path); //here return
}

递归调用必须将值返回给调用方

function searchLeft(node, path) {
    if (typeof node.left == 'undefined') {
        console.log(path);
        return path;
    }
    node = JSON.parse(JSON.stringify(node.left));
    path.push(node.data);
    return searchLeft(node, path); //here return
}

对于这个例子,您是正确的。但是要深度克隆一个对象,假设它有多个级别,JSON方法非常简单,而且可能是最快的。关于遍历我的代码,为什么你认为我没有?我记录了过程中的每一步,不知道为什么函数中的“path”保持正确的值,但在“return path”之后它没有定义。我浏览了每一行。为什么要投反对票/反对票?对于这个例子,你是对的。但是要深度克隆一个对象,假设它有多个级别,JSON方法非常简单,而且可能是最快的。关于遍历我的代码,为什么你认为我没有?我记录了过程中的每一步,不知道为什么函数中的“path”保持正确的值,但在“return path”之后它没有定义。我走过每一行。为什么投反对票/反对票?