私は C++ の初心者で、この問題について助けが必要です。これは、ツリー構造に基づく単純な作成、読み取り、および印刷プログラムです。
問題は、ツリーを印刷すると、数字と文字で作られた奇妙な情報が表示されることです。おそらく正しいメモリデータを読み取っていません。コンソール入力を読み取り、それらをツリー構造に追加する再帰的な「作成」関数を作成しました。関数は次のように機能します。
- コンソール入力を読み取ります。
- 入力が null の場合は NULL を返します。
- そうでなければ入力をノード値に割り当てます(この場合は「情報」)。
- 関数は「自分自身を呼び出し」、左から右に移動します(左のブランチを下ってから、ルートまで、次に右のブランチを下ります)。
基本的には、関数は下に行くと左のフォロワーをチェックし、上に行くと右のフォロワーをチェックします。
例: 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.
ありがとう。