У меня есть два стека, один с операндами, другой с операторами. Моя проблема превращает эти два стека в двоичное дерево.Создать рекурсивное двоичное дерево?
Например, выражение (2+3)*(4-3)
будет переведен на постфикса (таким образом, что 24+43-*
), а затем положить на два стека 3442
и *-+
будет стеки (с вершины быть 3 и * соответственно).
Теперь с этими стеками, мне нужно, чтобы сформировать бинарное дерево как
*
+ -
2 3 4 3
Есть ли способ сделать это рекурсивно?
Прямо сейчас, у меня есть алгоритм, например, так:
Создать корень дерева, присвоить значение корня до первого оператора в операторе стека. Установите правый и левый указатели на нуль.
Создайте правый узел, назначьте значение следующего оператора, если он существует, если не назначить ему операнд. Затем сделайте то же самое для левого узла.
Моя проблема заключается в том, чтобы сделать это рекурсивным или заставить его обрабатывать множество разных случаев.
Благодарим за помощь.
Вы немного перепутали количество стека.Ответ от Let_Me_Be ниже выглядит хорошо, вам нужно больше деталей? –
более подробно было бы хорошо. в частности, я могу найти самого высокого оператора, но я не уверен, как разделить выражение или «применить на обеих частях». – Blackbinary
Ваш метод кажется ошибочным: для этого требуется, чтобы на каждой стороне оператора было одинаковое количество операндов и операторов. используя это выражение '(2 + 3) -4', получается стек, идентичный' 2+ (3-4) '. –