数値表現で書かれているString(infix)を受け取ってlevel-order-traversalの配列に変換するプログラムを作りたいのですが。どうやって書いたらいいかさえもわかりません。さらに、Level-orderからPostfixとlevel-orderからprefixに画面に出力する方法も知りたいのですが、アドバイスをもしよかったらお願いします。
質問の補足として、
2*X/5+3*Y-4*Z-1 (infix)
をStringで受けたファンクションから
-/-*+*12X5*4Z 3Y (level order)
(空のノードと一番初めはスペースにしてます)
っという風に変えたいということです。
二分木は
....................-
.......... /....................-
.....*........+..........*..........1...
2..X.....5...*......4...Z................
................3..Y.........................
のようになっています。(ちょと解りづらくて申し訳ないですが.を抜かした部分が木になっています)
どなたかわかる方よろしくお願いします。
No.2ベストアンサー
- 回答日時:
大学レベルの課題だと思いますが、作成者のレベルが推し量れる良い課題だと思います。
で、アドバイスだけですが
1.ノードのクラスを設計する
(符号をどのように扱うか、レベル自体をノードの情報として保持するか)
2.Treeのクラスを設計する
(追加・削除・表示の機能を実装)
3.infixの内容を解析するプログラムの検討
(スタックを利用して、逆ポーランド表記に変換するのが楽かな)
4.スタックしたデータでノードのインスタンスを作成してTreeに追加
5.Treeの内容を表示
(ついでにPreorderやInorderなど別の巡回法も実装すれば+αの評価がもらえるかも)
二分木も逆ポーランドのプログラムもネットで多数Hitするので参考にすればよいでしょう。
返事が遅くなって申し訳ないです。
なんとか、先生の助けを借りて、終わらせる事ができました。
ChateauAresもとても参考になりました。
ありがとうございました。
No.1
- 回答日時:
>2*X/5+3*Y-4*Z-1 (infix)
>-/-*+*12X5*4Z 3Y (level order)
こうはならないと思うのだけど??
演算子の優先順位とかは通常の*/は+-より先に計算というものではないのでしょうか?
全部の演算子が等価だとすれば、手前から順になるべきだと思うし。
私の理解が間違っているのでしょうか?
どうしてこうなるのかアルゴリズムを補足して下さい。
でないとプログラムは書けません。
この回答への補足
すいません、間違えてました。。
問題は(2*X)/(5+3*Y)-(4*Z-1)
というのを前提としてました。
でもちょっとわかりづらいので、例を変えようと思います。
56+34*2-36*12/3+5*13-5*4+6 (infix)
の場合
+ - 6 + * - * 5 4 + * 5 13 56 * 36 / 34 2 12 3
(level order)
となると思いますが、また間違ってたらすいません。
>演算子の優先順位とかは通常の*/は+-より先に計算>というものではないのでしょうか?
はい、普通の計算の優先順位であっています。
そして、質問は、infixをStringで受け取り、level order の配列で返すという質問でした。
方法としては、演算子の優先順位順に演算子を前に持っていってその後に近くの数字を次に持ってくる!?のような方法で配列を並び替えればいいのでしょうか?
どういう方法で並び替えてよいのかわからなくて困っています。もし、わかるようでしたらアドバイスお願いします。
質問の内容がわからないようであったら、まだ補足します。間違いを指摘していただいてありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- 英語 描写述語の条件(本来の性質、一時的な属性、又は両方)について 2 2022/07/25 13:41
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
session,requestはjspで未定義...
-
どんな時にIteratorを使うと便...
-
どうしてListオブジェクトをIte...
-
プログラミングの問題です。大...
-
えハミルトン路と全域木のちが...
-
配列にnullを代入すると、null...
-
Processingでマウスクリックで...
-
サーブレットをapacheで公開す...
-
下記のリストならno002が含まれ...
-
is this even a thing?
-
JAの支部?地域の農協のカード...
-
CSV出力を画面から選択したデー...
-
ショートカットキーについて
-
list の空は [] ってあわらすのに
-
あんまりお料理しないのに台所...
-
質問です。 配列が100以上の場...
-
次のhtml・cssでspan内の文字を...
-
Jupyter notebookですわかりま...
-
Eclipse 動的プロジェクトで404...
-
下記問題の答えが"D"になる意味...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
iText セル内での自動改行について
-
アコーディオンメニューにする...
-
【jQuery】MixltUPの複数フィル...
-
或る文字列の文字数が一定数以...
-
Aタグのhrefの値を取得したいの...
-
こんばんは。 メガメニューを今...
-
URL+URN=URI と習ったのですが...
-
2つのXMLファイルを読み込む
-
Nivo Sliderのカスタマイズにつ...
-
Listでintの最大値を超える要素...
-
JTextAreaを改行コードを直接書...
-
配列による二分木
-
Firefox にて appendChild での...
-
イベントリスナの削除
-
既存のXMLを別のXMLの要素とし...
-
jQueryについて
-
jtreeのノードを右クリックで選...
-
ajaxで読み込んだDOMに対してin...
-
(再質問)エクセルのマクロボ...
-
collection型を引数にしたファ...
おすすめ情報