Двоичные деревья, построить дерево на основе предварительного порядка

построить дерево, учитывая его порядок, достаточно просто. Но, скажем, вы должны построить дерево на основе его предварительного порядка (например, + + y z + * x y z).

Легко видеть, что + является корнем, и как продолжить оттуда в левом поддереве. Но... как узнать, когда вы должны "переключиться" на нужное поддерево?


person Krang    schedule 11.08.2010    source источник


Ответы (1)


Обычно непорядок считается трудным случаем.

Для предварительного заказа у вас будет просто такая грамматика.

expr ::= operator expr expr | var

За оператором следуют ровно два корректных выражения. Это можно легко проанализировать с помощью рекурсии

Если вы анализируете дерево и получаете переменную, возвращайте переменную. Если вы анализируете дерево и получаете оператор, анализируйте два следующих дерева как правое/левое поддеревья.

person Dario    schedule 11.08.2010