2016-10-28 6 views
1

式ツリーが与えられたときに文字列式を作成するのに問題があります。私の式ツリーは、(出力コンソールで)次のようになります場合:式ツリーが与えられたときに文字列式を作成する

(*(+(5)(-(2)(3)))(6)) 

どのように私は、通常のフォーマットである式を作成するには、この経由する方法を作成するのですか?例えば、このような:

(2 - 3 + 5) * 6 

として上記のように、私は(実際の式ツリーまたは式ツリーの文字列の向きを操作する必要があります:(*(+(5)( - (2)(3 )))(6)))。

答えて

0

prefix-inix変換アルゴリズムを使用する必要があります。

これは、式ツリーの文字列が接頭辞の形式であり、中置の形にしたいからです。

入力文字列の中かっこはすべて削除できます。そうすれば、より簡単になります。

+0

ありがとうございました。私はあなたに投票しましたが、私は評判が低いので表示されません。このためにスタックを使用するのが最善の方法だと思いますか? –

+0

私はあなたの問題を解決しました。それだけで十分です。そして、ええ、スタックは、LIFOプロパティのために、この種の問題を解決する最善の方法です。 –

0

について、これらのドキュメントを読むことをお勧めします。

操車場アルゴリズム:https://en.wikipedia.org/wiki/Shunting-yard_algorithm

このアルゴリズムは、彼らの「優先力」に応じてスタッキング「トークン」については、例えばごとに、括弧の間に関数が最初に来ます。それは、これらの読みについて:

https://en.wikipedia.org/wiki/Order_of_operations

http://introcs.cs.princeton.edu/java/11precedence/を私が助けたと思っている

(この1つは、プログラミングに特異的です)。

よろしくお願いいたします。 :)

関連する問題