【问题标题】:Not expression conversion but conversion from preorder to Inorder (not expression)不是表达式转换,而是从前序到中序的转换(不是表达式)
【发布时间】:2012-11-15 20:10:02
【问题描述】:

我不是要求表达式转换

conversion from infix to prefix

我只是问对于BST,如果输入以前缀表示法的形式给出,即BST的前序遍历,那么我如何将值序列转换为中缀表示法,即BST的中序遍历.

                 8
               /  \
              1    12
              \     /
               5   9
             /   \
            4     7
                 /
                6

例如,前序遍历将给出 8 1 5 4 7 6 12 9

我如何转换这些值序列(输入) 到一个中序遍历表达式 1 4 5 6 7 8 9 12.

AS 在某些情况下中序表达式更容易处理...

【问题讨论】:

  • “我不是要求表达式转换” - 嗯,你是。
  • 我希望前序遍历为:1 4 5 6 7 8 9 12,使用“左子树、节点、右子树”。

标签: c++ binary-search-tree


【解决方案1】:

使用 BST:
前缀:左子树、节点、右子树。
中缀:节点、左子树、右子树。
后缀:右子树、左子树、节点。

转换取决于您如何遍历树。

【讨论】:

  • 我知道,但我只是想知道,如果一个序列是以序形式给出的,我如何将值序列转换为有序形式。
  • 把它放入一个排序的BST中,最左边的叶子包含第一个节点,最右边的叶子包含最大值。然后遍历它。否则重新排序节点(组织成新树通常有助于与就地重新排序)。
  • 对于您的应用程序,您不应该将树定制为预购,而是更通用的东西。
  • BST 可以按任何顺序排列。排序的 BST 可以通过您遍历它们的方式产生不同的结果。拿笔和纸,尝试我发布的不同方法。当遇到“节点”时,写下数字。
【解决方案2】:

V = 顶点

L = 左子树

R = 右子树

预购 = VLR

顺序 = LVR

后订单 = LRV

(只要切换顺序修复就可以了)

将它们放回去以使前缀值成为中缀值的一种方法是再次使用前缀值创建二叉搜索树并进行中序遍历。

或者!

只是排序老兄......(如果你将它们挤压成一条线(从上到下挤压),BST 总是排序)

【讨论】:

    猜你喜欢
    • 2011-08-02
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多