给定两个大小为 N 的未排序数组,我们要确定由它们构造的二叉搜索树是否相等。
因此,数组的元素被挑选出来并插入到一个基本的(没有平衡,没有红黑,什么都没有)二叉搜索树中。直接给定两个数组,我们能否确定它们是否产生相同的二叉搜索树。
有一个明显的 O(N 2 ) 最坏情况时间复杂度解决方案:构造两棵树,并比较它们的相等性。
是否有 O(N) 或 O(N log N) 解决方案?
我试图提取的问题的想法是:BST 的构造取决于元素的相对位置。例如,如果在一个数组中紧挨着 20 有一个值为 51 的元素,则在另一个数组中必须没有 20 到 51 之间的元素才能使树相等(否则 20 的右孩子将是那个数字,而不是 51 )。
我确实尝试了几种方法:
- 天真的方法:构建 2 棵树并进行比较。
- 我使用了一个有趣的变体,我将数组分成 2 个(一个较小的子数组和一个比枢轴大的子数组),并递归地将左数组传递给左孩子,另一个传递给右孩子。就地和厚脸皮,但仍然 O(N 2 )。
- 一位朋友尝试将最长的子序列应用于它并找到它然后进行比较,但这是不正确的。
- 我正在尝试使用 LinkedHashMap 解决它,但我很难证明它的正确性。
帮助,以及解决此问题的任何提示将不胜感激。