此问题已在此处提出: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遍历相同,那么我错了,那么树也一样吗?
答案 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”。