保持递归函数C ++的计数

时间:2012-08-06 17:13:42

标签: c++ recursion

我有一个以水平顺序遍历AVL树的函数。输出格式为:

level 0: jim(2)
level 1: bob(1) joe(1)

但是当我达到4级以上时,我想将其分解,以便每行只显示8个项目。所以输出会看起来像这样:

level 4: item1(1) item2(1) item3(2) item4(2) item5(1) item6(2) item7(1) item8(2)
level 4: item9(2) item10(2)

现在我的代码将显示所有项目,但只显示一行。我无法弄清楚如何改进这些代码,以便按照我想要的方式进行格式化。我该如何实现呢?

以下是当前的功能:

//PRINT BY LEVEL ORDER TRAVERSAL
void Avltree::level_order(Avlnode* root, ofstream &out){
int h = height(root);
for(int i = 0; i < h; i++){
    out << "Level " << i << ": "; 
    print_level(root, i, out);
    out << endl;
}
}

//PRINT A GIVEN LEVEL ON A TREE
void Avltree::print_level(Avlnode* root, int level, ofstream &out){

    if(root == NULL)
        return;
    if(level == 0){
        out << root->data << "(" << height(root) << ") ";
    }
    else if (level > 0)
    {
        print_level(root->left, level-1, out);
        print_level(root->right, level-1, out);
    }
}

2 个答案:

答案 0 :(得分:2)

你应该将一个计数作为参数传递给递归函数,当计数%8(或你想要的每行数是多少)是0时,然后开始一个新行。

答案 1 :(得分:2)

按引用参数添加呼叫,以打印节点总数

void Avltree::print_level(Avlnode* root, int level, ofstream &out, int &count)
{
    ...
    if(level == 0){
        out << root->data << "(" << height(root) << ") ";
        count++;
    }
    if(count==8){
        out << endl;
        count=0;
    }
    ...
}

虽然呼叫是

int count=0;
for(int i = 0; i < h; i++){
    count=0;
    out << "Level " << i << ": "; 
    print_level(root, i, out, count);
    out << endl;
}