0

私は C++ の初心者で、この問題について助けが必要です。これは、ツリー構造に基づく単純な作成、読み取り、および印刷プログラムです。

問題は、ツリーを印刷すると、数字と文字で作られた奇妙な情報が表示されることです。おそらく正しいメモリデータを読み取っていません。コンソール入力を読み取り、それらをツリー構造に追加する再帰的な「作成」関数を作成しました。関数は次のように機能します。

  1. コンソール入力を読み取ります。
  2. 入力が null の場合は NULL を返します。
  3. そうでなければ入力をノード値に割り当てます(この場合は「情報」)。
  4. 関数は「自分自身を呼び出し」、左から右に移動します(左のブランチを下ってから、ルートまで、次に右のブランチを下ります)。

基本的には、関数は下に行くと左のフォロワーをチェックし、上に行くと右のフォロワーをチェックします。

例: 1->ルート、2->左フォロワー、3->右フォロワーのようなツリーは、次のように読みます: 1,2,0,0,3,0,0. 最初の 2 つの 0 は NULL 値ノード「2」のフォロワーを割り当て、関数をルートに戻し、右のブランチを下ります。

次のようなより複雑なツリー: 1-> ルート、2-> "1" の左、4-> "2" の左、5-> "4" の右、3-> "1" の右。7->「3」の左は、1,2,4,0,5,0,0,0,3,7,0,0,0 のように読みます。

"read" 関数は left->root->right を読み取り、"create" 関数と同じように機能します。

これは私のコードです:

#include<iostream>
using namespace std;
struct nod
{
    int info;
    nod *left,*right;
} *tree;
nod * create()
{
    int n;
    nod*r;
    cin>>n;
    if(n==0)
        return NULL;
    r=new nod;
    r->info=n;
    r->left=create();
    r->right=create();
    return r;
}

void read(nod *r)
{
    if(r)
    {
        read(r->left);
        cout<<r<<" ";
        read(r->right);
    }
}

int main()
{
    tree =new nod;
    tree=create();
    read(tree);
    return 0;
}

入力は次のように行われます: 1,2,3,0,4,0,0,5,0,0,6,7,0,0,0.

ありがとう。

4

1 に答える 1

2

私が見る出力の唯一の問題rは、ポインターである を印刷していることです。私はあなたが意味したと思いますr->info

于 2013-05-30T13:23:49.807 に答える