![
]ttps://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.momoyama-usagi.com%2Fentry%2Finfo-algo-tree-traverse&psig=AOvVaw3AGtH1evbZaou6u2ksi6St&ust=1636866178615000&source=images&cd=vfe&ved=0CAsQjRxqFwoTCLDrpvjHlPQCFQAAAAAdAAAAABAI
例えばこのような2分木であるとしたら,
15(10(4(NULL,NULL),14(12(NULL,NULL),NULL)),19(17(NULL,NULL),NULL))
と出力するプログラムを実装しようとしています.
引数はNode型のnです.
Node型は
c
1typedef struct node { 2 char *label; 3 struct node *left; 4 struct node *right; 5} Node;
と定義してあります。
再帰関数で実装できそうだなというところまでしか思いつかず,うまくいきません。
実装の考え方を教えて頂きたいです。よろしくお願いします。
4を4(NULL,NULL)と表現するのであれば、12,17でも12(NULL,NILL), 17(NULL,NULL)では
ないですか?
リンク先に考え方やコードが載っていますが、それを実装・実行してみたりはしていないのでしょうか。
yu-imaさん,修正しました
jimbeさん,別のところでリンク先のコードを参考にしました。今回の質問内容である2分木の構造の実装に関しては記載がないです。
> 今回の質問内容である2分木の構造の実装に関しては記載がない。
つまり問題は、2分木による "表示" では無く、2分木の生成自体ということでしょうか。
2分木の生成自体はできています。(私の1つ前の質問を見ていただければわかります)
生成したNode型で構成されている2分木を本質問に記載しているような出力のように表示させたいのが現状です。
であれば、リンク先の情報・コードで十分対応できると思うのですが、どこが分からないのでしょうか。
https://www.momoyama-usagi.com/entry/info-algo-tree-traverse
私はこのリンクの内容を本質問内容へと昇華できませんでした。単純にノードのlabelを出力するだけであればよいのですが,ノードとその子のノードも合わせてとなると,リンク先の実装に比べると複雑になると自分は感じました。
もう少しリンクの内容を落とし込んで考えてみます。
>単純にノードのlabelを出力するだけであればよいのですが,ノードとその子のノードも合わせてとなると ~
難しく考えすぎのように思います。
ツリーが再帰関数で処理できるのは、ツリーを構成する各部分がツリーだからです。
まずはツリーにデータが1つもない場合(=ルートが null の場合)にどう表示されるべきかを考え、それを実装してそのように表示されることを確認してください。
次にデータが1つ(例でいえば "15" )を入れ、どう表示されるべきかを考え、それを実装してそのように表示されることを確認してください。そして同時に、先の「データが1つもない場合」のツリー構造に戻してもコードを直さずに先の結果と同じく表示されることを確認してください。
これだけでもほぼ形は出来ていることと思います。
回答2件
あなたの回答
tips
プレビュー