二叉搜索树是否可以仅由中序遍历构建?

Can a binary search tree be constructed from only the inorder traversal?

想检查是否有一种方法可以仅从将按排序顺序排列的中序遍历构建二叉搜索树。我在想我们可能有某种方法可以递归地做到这一点,但无法弄清楚。任何指针将不胜感激。

一个BST只有一个中序遍历,但是一个给定的中序遍历可以构造多个BST。因此,是的,可以用给定的中序遍历构造一个 BST,但你可能不会得到与你开始的中序遍历相同的树。

查看这篇文章了解更多信息:https://www.geeksforgeeks.org/find-all-possible-trees-with-given-inorder-traversal/

是的,可以从中序遍历构造二叉搜索树。

观察二叉搜索树的中序遍历总是排序的。

有很多可能的结果,但人们可能特别感兴趣的是生成一棵尽可能平衡的树,以便提高搜索效率。生成 低效 二叉搜索树的一种方法是在最后插入的节点的右侧不断添加新节点。然后生成的二叉搜索树 倾斜 .

如果例如中序遍历为1,2,3,4,5,6,我们会得到这棵树:

 1
  \
   2
    \
     3
      \
       4
        \
         5
          \
           6

作为二叉搜索树,这不是很有用,因为它实际上已经退化为单链,并且在该树中的搜索并不比在输入数组中从左到右执行搜索更好。

一个更有效的替代方法是二叉搜索树,它具有相同的中序遍历:

       3
      / \
     2   5
    /   / \
   1   4   6

算法

生成相当平衡的二叉搜索树的算法确实可以是递归算法:

  1. 如果给定数组(遍历)为空returnnull(空树)
  2. 取给定数组的中间值(遍历)并为其创建一个节点。
  3. 取选中数组值左边的子数组,对其递归执行算法。 return 是一个节点(子树的根),它应该作为第 2 步中创建的节点的左子节点附加。
  4. 取选中数组值右边的子数组,对其递归执行算法。此 return 是一个节点(子树的根),应作为第 2 步中创建的节点的右子节点附加。
  5. Return步骤2中创建的节点。