2015-07-20 132 views
-1

我甚至不确定这个问题的标题应该是什么 - 我不确定发生了什么问题。返回undefined的Javascript递归函数

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

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.log(路径)示出正确的值:

[10]

但是,如果我

console.log(searchLeft(testTree,[])); 

我得到

不确定

为什么没有正常工作返回[10]?

谢谢!

+0

在这个例子中,你是正确的。但是为了深入克隆一个对象,假设它有很多层次,JSON方法非常简单并且可能最快。关于阅读我的代码,为什么你认为我没有?我console.logged每一步的方式,并不知道为什么在函数中,'路径'保持正确的价值,但'返回路径'后它是未定义的。我走过每条线。 – ZAR

+0

为什么是反对/近距离投票? – ZAR

回答

3

你的递归调用必须将值返回给调用者

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 
}