挿入後のベクトルベースのバイナリツリーでのC ++印刷値

グラントロンテリオ

私はベクトル内に二分木を保存する任務を負っています。各ノード内には、int ID、int Age、および文字列名が格納されます。

ノードは、IDによってベクトル内に格納および編成されます。

二分木をベクトル内に格納するとき、私はアルゴリズム2iと2i + 1を使用して、ノードの左と右の子をそれぞれ指示しています。

これらの条件を満たすと思われる挿入メソッドを作成できましたが、何らかの理由で、ベクトルの値を出力しようとすると、負の値が表示されます。この特定の例では、次の値を挿入します

5021ティム

7522スティーブ

3040エリック

2035メアリー

10060ジュディ

これらの4つの値を挿入した後、find()メソッドを使用してEricを見つけようとします。この場合、プログラムは「NotFound!」を返します。

report()関数を実行して、ベクトル内に格納されているすべての値が大きな負の値のIDであることを確認します。

これには特別な理由がありますか?Find() Report()

これが私のコードです。

#include "BinaryTree.h"
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
int index = 0;

struct Node
{
    int ID;
    int age;
    string name;

    Node()
    {

    }

    Node(int id, int Age, string nm)
    {
        this->ID = id;
        this->age = Age;
        this->name = nm;
    }
};

vector<Node> binaryTree(30);


BST::BST()
{

}



void BST::start()
{
    int choice;


    cout << "What would you like to do?" << endl;
    cout << "1. Add a node to the tree" << endl;
    cout << "2. Delete a node from the tree" << endl;
    cout << "3. Find a node in the tree" << endl;
    cout << "4. Report the contents of the tree" << endl;
    cout << "5. Exit program" << endl;

    cin >> choice;

    if (choice == 1)
    {
        insert();
    }

    if (choice == 2)
    {
        Delete();
    }

    if (choice == 3)
    {
        find();
    }

    if (choice == 4)
    {
        report();
    }


}


void BST::insert()
{
    int ID;
    int AGE;
    string NAME;
    int root = 1;

    bool success = false;
    cout << "Please enter the ID number, age and name:" << endl;

    do
    {
        cin >> ID >> AGE >> NAME;
    } while (ID < 0);

    Node *tree = new Node(ID, AGE, NAME);


    if (index = 0)
    {
        binaryTree[1] = *tree;
    }

    if (index > 0)
    {
        do
        {
            if (tree->ID > binaryTree.at(root).ID)
            {
                root = 2 * root + 1;

            }

            if (tree->ID < binaryTree.at(root).ID)
            {
                root = 2 * root;
            }

            if (binaryTree.at(root).ID == NULL)
            {
                binaryTree.at(root) = *tree;
                success = true;
            }
        } while (!success);
    }

    index++;
    delete tree;

    start();
}





void BST::Delete()
{
    int input_id;
    cout << "What is the ID of the person to be deleted" << endl;
    cin >> input_id;

    for (unsigned int i = 0; i < binaryTree.size(); i++)
    {
        if (input_id == binaryTree.at(i).ID)
            binaryTree.erase(binaryTree.begin() + i);


    }
    cout << " " << endl;
    start();
}


void BST::find()
{
    int key;
    bool found = 0;

    cout << "What's the ID?" << endl;
    cout << " " << endl;

    cin >> key;

    for (unsigned int i = 0; i < binaryTree.size(); i++)
    {
        if (binaryTree.at(i).ID == key)
        {
            cout << "The ID is " << binaryTree.at(i).ID << endl;
            cout << "The age ID " << binaryTree.at(i).age << endl;
            cout << "The name is " <<binaryTree.at(i).name << endl;
            cout << " " << endl;

            found = true;

        }
        if (found == false)
        {
            cout << "Not found." << endl;
            cout << "" << endl;
            break;
        }
    }
    start();
}


void BST::report()
{

    cout << "The contents of the tree are" << endl;
    cout << " " << endl;

    for (unsigned int i = 0; i < binaryTree.size(); i++)
    {
        int level = 0;
        if (i == 0) level = 0;
        if (i == 1 || i == 2) level = 1;
        if (i >= 3 && i <= 6) level = 2;
        if (i >= 7 && i <= 14) level = 3;
//TODO complete list
        cout << binaryTree.at(i).ID << " " << binaryTree.at(i).age << " " << &binaryTree.at(i).name << " " << level << endl;

    }
}

提案/ヘルプをいただければ幸いです!

ありがとう!

アユシュマハジャン

ここでのインデックス作成に問題があると思います。insert()インデックスインにルートを持つバイナリツリーを作成しましたが、report()関数ではインデックス0から出力を開始binaryTree.at(int)しました。どうすればよいかわかりません。

しかし、find()エラーの原因は、ループ内にif(found == 0)を含めたためです。これは、ツリーの最初の要素が検索している要素でない場合、ループを中断することを意味します。代わりにこのコードを使用してください

void BST::find()
{
    int key;
    bool found = 0;

    cout << "What's the ID?" << endl;
    cout << " " << endl;

    cin >> key;

    for (unsigned int i = 0; i < binaryTree.size(); i++)
    {
        if (binaryTree.at(i).ID == key)
        {
            cout << "The ID is " << binaryTree.at(i).ID << endl;
            cout << "The age ID " << binaryTree.at(i).age << endl;
            cout << "The name is " <<binaryTree.at(i).name << endl;
            cout << " " << endl;

            found = true;

        }
    }
    if (found == false)
    {
        cout << "Not found." << endl;
        cout << "" << endl;
    }
    start();
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Cのバイナリツリールートに値を挿入します

分類Dev

指定されたインデントレベルのバイナリツリーをC ++で印刷する

分類Dev

指定されたインデントレベルのバイナリツリーをC ++で印刷する

分類Dev

BFS(バイナリツリー)を_特定のフォーマット_でレベル順に印刷する

分類Dev

cのレベルごとにバイナリツリーから要素を印刷する方法

分類Dev

ネストされたループを使用したバイナリ値の印刷

分類Dev

配列の最後の値のみをイベントリスナーに割り当てる for ループ

分類Dev

バイナリツリー:昇順でのデータの印刷

分類Dev

Javaでのバイナリツリーの印刷

分類Dev

残り火でマテリアライズする入力テキストボックスのラベルと値のオーバーラップ

分類Dev

スタックを使用したバイナリツリーのルートからリーフまでの値の最大合計

分類Dev

別のイベントが入力値を変更したときのイベントリスナー

分類Dev

グループが印刷された後のJasperReportsスクリプトレットでの値の計算

分類Dev

グループが印刷された後のJasperReportsスクリプトレットでの値の計算

分類Dev

ラベルに印刷されたデータベースドロップダウンリストの値

分類Dev

戻り値の印刷

分類Dev

ベクトルを値でデータフレームのリストにバインドします

分類Dev

ベクトルを値でデータフレームのリストにバインドします

分類Dev

ベクトルの不要な値からのイテレータ印刷

分類Dev

メインプログラムのイベントリスナーコールバック関数からの戻り値にアクセスしますか?

分類Dev

データベースの値をリストに挿入します

分類Dev

FirebaseデータのAndroid Studio値イベントリスナー

分類Dev

JQueryクリックイベントの.onリスナーの子セレクターの値を取得します

分類Dev

バイナリ検索ツリー全体を挿入/印刷できません

分類Dev

キーがC ++のベクトルであるマップのキーと値のペアを印刷する

分類Dev

空のリストダーツの特定のインデックスに値を挿入します

分類Dev

レポートを印刷した後、データベース値をインクリメントします

分類Dev

バイナリ行列の数値のベクトル/ Rのベクトルを計算/変換します

分類Dev

Reactフックの値はイベントリスナー関数ではアクセスできません

Related 関連記事

  1. 1

    Cのバイナリツリールートに値を挿入します

  2. 2

    指定されたインデントレベルのバイナリツリーをC ++で印刷する

  3. 3

    指定されたインデントレベルのバイナリツリーをC ++で印刷する

  4. 4

    BFS(バイナリツリー)を_特定のフォーマット_でレベル順に印刷する

  5. 5

    cのレベルごとにバイナリツリーから要素を印刷する方法

  6. 6

    ネストされたループを使用したバイナリ値の印刷

  7. 7

    配列の最後の値のみをイベントリスナーに割り当てる for ループ

  8. 8

    バイナリツリー:昇順でのデータの印刷

  9. 9

    Javaでのバイナリツリーの印刷

  10. 10

    残り火でマテリアライズする入力テキストボックスのラベルと値のオーバーラップ

  11. 11

    スタックを使用したバイナリツリーのルートからリーフまでの値の最大合計

  12. 12

    別のイベントが入力値を変更したときのイベントリスナー

  13. 13

    グループが印刷された後のJasperReportsスクリプトレットでの値の計算

  14. 14

    グループが印刷された後のJasperReportsスクリプトレットでの値の計算

  15. 15

    ラベルに印刷されたデータベースドロップダウンリストの値

  16. 16

    戻り値の印刷

  17. 17

    ベクトルを値でデータフレームのリストにバインドします

  18. 18

    ベクトルを値でデータフレームのリストにバインドします

  19. 19

    ベクトルの不要な値からのイテレータ印刷

  20. 20

    メインプログラムのイベントリスナーコールバック関数からの戻り値にアクセスしますか?

  21. 21

    データベースの値をリストに挿入します

  22. 22

    FirebaseデータのAndroid Studio値イベントリスナー

  23. 23

    JQueryクリックイベントの.onリスナーの子セレクターの値を取得します

  24. 24

    バイナリ検索ツリー全体を挿入/印刷できません

  25. 25

    キーがC ++のベクトルであるマップのキーと値のペアを印刷する

  26. 26

    空のリストダーツの特定のインデックスに値を挿入します

  27. 27

    レポートを印刷した後、データベース値をインクリメントします

  28. 28

    バイナリ行列の数値のベクトル/ Rのベクトルを計算/変換します

  29. 29

    Reactフックの値はイベントリスナー関数ではアクセスできません

ホットタグ

アーカイブ