我遇到了我认为是一个递归问题,我不知道如何解决。我正在设计一个散列数组树结构,我想打印出最低级别的#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;来克服这个问题。值如上所示变量,但这并没有解决问题。该行继续多次打印。有办法克服这个问题吗?
答案 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
,您也可以将其传回来。