检查由未排序数组构造的二进制搜索树是否相等

时间:2015-06-28 08:16:07

标签: algorithm tree

此问题已在此处提出:http://stackoverflow.com/questions/14092710/equality-of-two-binary-search-trees-constructed-from-unordered-arrays

然而,我想到的解决方案相当简单,但在那里没有被提及。

问题陈述是:Given two arrays which represent a sequence of keys. Imagine we make a Binary Search Tree (BST) from each array. We need to tell whether two BSTs will be identical or not without actually constructing the tree.

我想到的是,只需对两个数组进行排序。如果它们是相同的,那么它们的inorder遍历也将是相同的,因此如果两个数组相同,那么它们肯定会导致相同的BST。假设如果两个二叉搜索树的inorder遍历相同,那么我错了,那么树也一样吗?

2 个答案:

答案 0 :(得分:1)

只有inorder遍历无法定义唯一的BST。你必须得到另一个前/后订单遍历来重建非常BST。

答案 1 :(得分:1)

除非我误解了“inorder遍历”的含义,否则这不起作用。不仅BST的inorder遍历不是唯一的,事实上在同一组元素上每个 BST的顺序遍历是相同的。这是一个小例子:

    4
   /\
 2/  \
 /\   \
1  3   5

    2
   /\
  /  \4
 /   /\
1   3  5

两棵树都有顺序遍历1,2,3,4,5。所以即使树木不同,你的方法也会报告“IDENTICAL”。

你的方法在其他方面也是错误的。如果两个BST具有相同的结构但具有不同的元素,那么您应该报告“IDENTICAL”,但当然它们的排序列表(= inorder遍历)是不同的 - 所以在这种情况下,您将报告“DIFFERENT”。