var count = 0;
var NumbOfNodes = function(root){
if(root.left != null){
NumbOfNodes(root.left);
}
count++;
if(root.right != null){
NumbOfNodes(root.right);
}
return count;
}
所以我有这个函数来计算树中的节点数。它是一个递归函数。当我计算一个全局变量时,该函数工作并返回一个适当的值。问题是,我想要计算成为函数的一部分。但是如果我在函数内部声明count,它会继续重置,我不会得到函数的正确答案。
那么,有没有办法在递归函数中保留变量的值。这个问题可以帮助我进行许多其他编码实践。
我想要的(图):树 - > NumbOfNodes() - >给我节点的数量。但我不想仅为此制作一个全局变量。
谢谢!
答案 0 :(得分:3)
只需从递归中返回计数:
var NumbOfNodes = function(root) {
var count = 0;
if (root.left != null) {
count += NumbOfNodes(root.left);
}
count++; // count ourself
if (root.right != null) {
count += NumbOfNodes(root.right);
}
return count;
}
这里的基本思想是,在递归的每一步,我们从零开始计数。然后我们将该计数添加到左右子树中的节点数,和我们添加一个,以计算自己。
答案 1 :(得分:0)
你真的需要一个额外的变量来维持计数吗?
试试这个,
var NumbOfNodes = function(root){
if(!root){
return 0;
}
return NumbOfNodes(root.right) + NumbOfNodes(root.left) + 1;
}
答案 2 :(得分:0)
您可以将count
作为参数传递给该函数,如
var NumbOfNodes = function(root, count){
if(!count) count = 0;
if(root.left != null){
NumbOfNodes(root.left, count);
}
count++;
if(root.right != null){
NumbOfNodes(root.right, count);
}
return count;
}
答案 3 :(得分:0)
由于NumOfNodes本身就是一个变量,因此它是一个实例,您可以使用this.count将自身缓存为值
var NumbOfNodes = function(root){
if (this.count === undefined) {
this.count = 0;
}
if(root.left != null){
NumbOfNodes(root.left);
}
this.count++;
if(root.right != null){
NumbOfNodes(root.right);
}
return this.count;
}
答案 4 :(得分:0)
为了保留变量的值,您需要递归地传递它。类似的东西:
var NumbOfNodes = numberOfNodes(roots, 0)
function numberOfNodes(root, count){
if(root.left != null){
numberOfNodes(root.left, count);
}
count++;
if(root.right != null){
numberOfNodes(root.right, count);
}
return count;
}
答案 5 :(得分:0)
如何在递归函数(Javascript)中保存值以递增
嗯,您不需要保存值来计算节点数。在设计递归函数时,只需考虑基础和归纳案例
node
为空,返回0 node
不为空,为此节点返回1,加上此节点的left
和{{的计数1}} nodes。我们的right
函数差不多写了
countNodes