给定二叉树,找到从叶到根的最大总和路径。例如,在下面的树中,有三个叶到根路径8->> 10,-4->>> 10和7-> 10。这三条路径的总和分别为16,4和17。它们的最大值是17,最大值的路径是7-> 10。
10
/ \
-2 7
/ \
8 -4
这是一个计算给定二叉树中从根到任何叶节点的最大总和的函数。这个问题在各种公司的访问中被多次询问。我正在尝试将ls和rs声明为静态...所以它产生错误的输出。但是当我删除静态关键字时,它产生了正确的输出。你能解释一下静态关键字的问题。
int roottoleafmaxsum(struct node*temp) //root will be passed as an argument
{
static int ls,rs; //left sum and right sum
if(temp) //if temp!=NULL then block will be executed
{
ls=roottoleafmaxsum(temp->left); //recursive call to left
rs=roottoleafmaxsum(temp->right); //recursive call to right
if(ls>rs)
return (ls+temp->data); //it will return sum of ls and data
else
return (rs+temp->data); //it will return sum of rs and data
}
}
答案 0 :(得分:3)
静态意味着它们将保留每个函数调用的值。 由于您正在使用递归,它将更改递归调用中的值,并且将在父函数中使用相同的值来生成错误。