用于计算n-airy树高度的递归函数

时间:2017-05-11 09:13:23

标签: c++ recursion tree

我需要你帮助解决这些问题。我在visual studio中解决了一个递归函数来计算n-ary树的高度。当我在一棵小树上测试它时,它给了我高度的值。但是,当我编译更大数据的代码时,运行时间超过3天而没有结果。我使用的功能如下:

Array ( 
    [0] => Array ( [KRA_category] => Business )    
    [1] => Array ( [KRA_category] => Business ) 
    [2] => Array ( [KRA_category] => People ) 
    [3] => Array ( [KRA_category] => Business ) 
    [4] => Array ( [KRA_category] => Business ) 
    [5] => Array ( [KRA_category] => Business ) 
) 

提前谢谢..

2 个答案:

答案 0 :(得分:1)

好吧,你用两次相同的参数调用相同的递归函数,这会让事情变得很慢。

unsigned int Height(NaryNode *root)
{
   unsigned int HeightMax = 0;
   unsigned i;
   for (i = 0; i < root->nchild; i++)
   {
      auto currHeigth = Height(root->child[i])
      if (currHeight > HeightMax)
        HeightMax = currHeight;
   }
   return (HeightMax + 1);
}

会给你一个巨大的加速。

答案 1 :(得分:0)

您为每个子树计算两次高度 如果树很深,这将花费很长时间。

为简单起见,假设每个节点只有一个子节点。

然后从根开始,你计算它的孩子的高度两次 对于这些计算中的每一个,您计算该孩子的两次高度 - 即四个函数调用。
对于这四个中的每一个,您都要进行两次计算 - 即八次计算。

对于每个级别下降,您将调用次数增加一倍Height,并计算具有32个单子节点的树的高度需要超过4个十亿函数调用。

Height(root->child[i])的结果存储在变量中。