从给定的后序遍历构建BST

时间:2012-01-13 12:39:24

标签: binary-search-tree

我有一个BST树大小的后序数组n如何显示只有一个可以从它构造的BST。我知道如果我从右到左添加节点,我可以重建树,但是如何显示只有一棵正确的树?

我试过说有两种可能的树,并尝试显示它是不可能的但是卡住了

1 个答案:

答案 0 :(得分:4)

这可能只是因为它是BST。回想一下,二进制树是一个有效的二进制搜索树:

-Left子树的值必须小于root的值
- 右子树的值必须大于root的值
- 左子树和右子树必须是有效的二叉搜索树。

因为我们知道必须如此,所以我们可以在后序中给出一个元素列表来重构树。数组中的最后一个元素(位于pos n)是根。找到比根更大的最右边的元素,这是根的第一个右子树。找到最接近数组末尾的元素,该元素小于根,这是左元素。递归地应用它来获取树。

示例:

[8,10,9,12,11]

      11 <----root

9是小于11的最右边的数字,所以它是左子树

  11
 /
/  

9

和12是大于11的最右边的元素,所以

    11
   /  \
  /    \
 9      12

现在,我们的根是9,小于9的最右边的数字是8,所以树变成了

       11
      /  \
     /    \
    9      12
   / \ 
  8

下一个大于9的数字是10,所以最后一棵树是

       11
      /  \
     /    \
    9      12
   / \ 
  8   10

尝试并说服自己,有其他可能的有效二元搜索树具有这些点,但那些在后序遍历上产生相同输出的树。