- ベストアンサー
木構造の前置形と行きがけ順について
はじめまして。今データ構造とアルゴリズムを勉強しているのですが、前置形でつまずいてしまいました。以下の問題を解くのですが、いまいち自分で出した答えに自身がないのです。 問題 式((a+b)+c*(d+e)+f)*(g+h)を前置形に変換せよ。 自分は、与えられた式を元に木を再現して、それから行きがけ順に並べたのですが。自信がないところは、ずばり、最初の項で和が3つあるところなんです。考え方の一つとして、枝分かれを3つという考え(すなわち、*++ab*c+def+gh)と、3つを一つの和ともう2つの和と分けて考える(すなわち*++ab+*c+def+gh)のと、どちらが正解なのでしょうか?といいますのも、defのところで、今度は逆に前置形からもとの式を作り直すときに違う式ができるのでは、と思うからです。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
2番の補足です。 * / \ + + / \ / \ + f g h / \ + * / \ / \ a b c + / \ d e ですよね?
その他の回答 (4)
- ymmasayan
- ベストアンサー率30% (2593/8599)
式((a+b)+c*(d+e)+f)*(g+h)を前置形に変換せよ。 これを前置系に変換すると *+++ab*c+def+gh これを元に戻すと ((a+b)+c*(d+e)+f)*(g+h) となってきちんと戻り何の問題もありません。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#1は、勘違いしていました A+B+Cを +ABCとするか ++ABCまたは+A+BCとするかって話ですね。 (私は後者の話だと思っていました。) +は普通に考えたら2項演算子ですので、 +ABCとは出来ません +(ABC)と表記するとか拡張が必要だと思います。 でないと質問者も言っている通り元には戻りません。
- JaritenCat
- ベストアンサー率37% (122/322)
普通は2分木で考えるので *++ab*c+def+gh はありえないと思います。(+が1個少ないですよね?)
お礼
ありがとうございます。普通は2分木を考えるのですか?
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
どっちでも数式としての評価は同じだと思いますが、 要は A+B+C を (A+B)+Cとするか A+(B+C)とするか って意味の様に思えます。 数学的には、 (A+B)+C=A+(B+C)だと思いますので、どちらでもいいのでしょうが プログラム的には +の優先順位は同等なのでどちらでもいいですけど 基本的には、左から評価するという規則が使われることが多いと思います。 その場合は、 (A+B)+C ってことになりますね。 元の式が作り出せるかどうかというのは、 要は()のくくりが戻せるかということでもあると思いますが (A+B+C)の部分は、()が使われていないので、厳密には同じ式に戻らない(どこに()が使われてあるいは使われていないかという情報が失われている)と思います。 いずれにしても、式全体としては、正しいものに戻せるとは思いますが。
お礼
はいありがとうございます。図まで載せてもらいありがとうございます。感謝です☆