在n元树c中查找给定节点的祖先

时间:2019-01-31 15:24:47

标签: c++ recursion tree

给定一棵大n元树,我需要创建一个递归函数,以打印叶子的所有祖先,例如,其中n元树结构的给出为

 typedef struct sNaryNode
 {
    int *data;
    int nchild;
    struct sNaryNode **child;
 } NaryNode;

这是我使用的函数,但是给出了错误的答案:

bool printAncestors(NaryNode *root, int *data) 
{ 
  int i=0;

   if (root == NULL) 
   return false; 

   if (root->data == data) 
   return true; 

   do
   {
      auto b=printAncestors(root->child[i], data);
      if(b)
      {   
          cout<<*root->data<<" ";
          return true;
      }
      else
          i++;
   }
   while(i<root->nchild);
}

1 个答案:

答案 0 :(得分:2)

您最后缺少一个返回值,即使one: trans_id: one trans_date: 2019-01-31 trans_qty: 1 trans_qty: 1 trans_type: 1 invoiced: 1 cs_trans_qty: 1 cs_trans_qty: 1 #should be part not part_id #part_id: one part: one customer: one two: trans_id: 2 trans_date: 2019-01-31 trans_qty: 3 trans_qty: 3 trans_type: 3 invoiced: 1 cs_trans_qty: 1 cs_trans_qty: 1 #should be part not part_id #part_id: two part: two customer: two 为零,也可能进入循环并访问root->child[i]
这两种情况都会导致不确定的行为。

我会用for循环来代替它:

root->nchild