0

AVL ツリーをレベル順にトラバースする関数があります。出力形式は次のとおりです。

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

しかし、レベル 4 以上になったら、1 行に 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)

現在、私のコードはすべての項目を表示しますが、1 行だけです。このコードを改善して、希望どおりにフォーマットする方法がわかりません。どうすればこれを実装できますか?

現在の機能は次のとおりです。

//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);
    }
}
4

2 に答える 2

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;
}
于 2012-08-06T17:22:10.173 に答える
2

カウントをパラメーターとして再帰関数に渡し、count % 8 (または 1 行あたりの数値にしたいもの) が 0 の場合は、新しい行を開始します。

于 2012-08-06T17:16:33.317 に答える