C ++中的递归打印问题

时间:2014-04-28 04:42:06

标签: c++

我遇到了我认为是一个递归问题,我不知道如何解决。我正在设计一个散列数组树结构,我想打印出最低级别的#34;在散列数组树中。我有一个数组跟踪每个级别上有多少个节点,我可以根据这个来计算最低级别。这是代码:

template <typename T>
ostream &operator << ( ostream &output, const HashNode<T> &node ){
if(node.stemNode == 0){
  //leafnode                                                                                                                                                                   

  for(int i=0; i < node.numElements; i++){

    output << "\n-------------------------------------------" << endl;
    output << "This Node's Level: " << node.nodeLevel << endl;
    output << "\nKey: " << node.keyArray[i] << endl;
    output << "\nData: " << *(node.dataArray[i])  << endl;
  }

}else if (node.stemNode == 1) {
  //stem node                                                                                                                                                                   

  for(int j=0; j<5; j++){
    if(node.childArray[j] != NULL){
      output << *(node.childArray[j]);
    }
  }

}
int ctr = 0;
for(int i=8; i>=0; i--){
  if(levels[i] == 0){
    ctr++;
  }
}
int lowest = 9-(ctr+1);
//output << "\nLowest Number of Levels: " << 9-(ctr+1) << endl;                                                                                                                 

return output << "\n\nLowest Level: " << lowest << " " << ctr2 << endl;
}

当我打印输出时,会出现短语&#34;最低等级&#34;会多次打印出来。我相信这是因为我以递归方式遍历我的树。我试图通过保存&#34;最低级别&#34;来克服这个问题。值如上所示变量,但这并没有解决问题。该行继续多次打印。有办法克服这个问题吗?

2 个答案:

答案 0 :(得分:0)

总是发送“最低级别”字符串到输出,无论它是否是一个词干节点。如果(stemnode == 0)将“最低级别”行移动到内部,默认情况下只返回输出。

粗略的递归规则;如果您只有一个退货声明,您可能会遇到最终条件问题。

答案 1 :(得分:0)

从评论我知道,目标是拥有最低级别&#34;部分打印一次。这可以通过对原始代码进行少量修改来完成。将原始打印功能更改为此功能头:

template <typename T>
ostream &printHashNode(ostream &output, const HashNode<T> &node){
    //your old code leaving out the "Lowest Level" part

并删除&#34;最低级别&#34;部分。 然后创建一个新的打印功能:

template <typename T>
ostream &operator << (ostream &output, const HashNode<T> &node){
    return output << printHashNode(output, node) << "\n\nLowest Level: " << lowest << " " << ctr2 << endl;
}

如果您需要ctr2计算的值printHashNode,您也可以将其传回来。