Алгоритм преобразования двоичного дерева в математическое выражение после исправления? - PullRequest
3 голосов
/ 27 августа 2009

У меня есть двоичное дерево для математического выражения (инфикс), я хочу напрямую преобразовать это дерево в постфикс (стек) любой орган может предложить алгоритм?

Ответы [ 2 ]

2 голосов
/ 27 августа 2009

То, что вы ищете, называется пост-заказом обход дерева :

postorder(node)
  if node.left  ≠ null then postorder(node.left)
  if node.right ≠ null then postorder(node.right)
  print node.value
0 голосов
/ 27 августа 2009

Легко, каждый узел (Левый, Правый, Данные).

Начните с первого узла. выполнить алгоритм для левого поддерева, если оно доступно, а затем выполнить алгоритм для правого поддерева и затем распечатать данные.

TreeNode = ([TreeNode], Data, [TreeNode])

TreeToPostfix: [TreeNode] -> Data*
TreeToPostfix(nil) = []
TreeToPostfix((left, data, right)) ==
  TreeToPostfix(left) ++ TreeToPostfix(right) ++ Data

Например:

              +
            /   \
           *     -
          / \   / \
         2   3 4   5

Производит: 2 3 * 4 5 - +

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...