在二叉树中查找从根到叶的最大总和

时间:2014-07-16 18:47:51

标签: recursion data-structures static max binary-tree

给定二叉树,找到从叶到根的最大总和路径。例如,在下面的树中,有三个叶到根路径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
    }
}

1 个答案:

答案 0 :(得分:3)

静态意味着它们将保留每个函数调用的值。 由于您正在使用递归,它将更改递归调用中的值,并且将在父函数中使用相同的值来生成错误。