将二叉树转换为后置数学表达式的算法?

时间:2009-08-27 08:23:04

标签: algorithm

我有一个数学表达式的二叉树(中缀),我想直接将这个TREE转换为后缀(Stack) 任何人都可以建议算法吗?

2 个答案:

答案 0 :(得分:2)

您要搜索的内容称为订购后tree traversal

postorder(node)
  if node.left  ≠ null then postorder(node.left)
  if node.right ≠ null then postorder(node.right)
  print node.value

答案 1 :(得分:0)

简单,每个节点都是(左,右,数据)。

从第一个节点开始。执行左子树的算法(如果可用),然后执行右子树的算法,然后打印数据。

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 - +