检查二叉树中的重复项

时间:2012-02-13 17:03:33

标签: algorithm duplicates binary-tree

如何检查我的二叉树是否包含重复项? 你有算法吗? 请写下伪码

编辑:或(更好)使用数学属性。 这是我的树上的字母A :( a,U,V)其中A和U中的\分别是左子项和右子项。

如果使用排序关系&lt;二进制搜索树对树进行排序。 (riflessive,antisymmetric,transitive,total)我可以表达T =(a,U,V)是有序的,没有重复IFONLY \forall u \in flatten(U) and \forall v \in flatten(V). u < a< v and u \neq a and a \neq v,我要以递归方式检查树U和树树V的属性。但问题是:如果树没有排序(或者不是二叉搜索树),我如何检查树不包含重复项?

为我的第一个不明确的问题道歉

EDIT2: flatten是返回参数树元素集的函数

2 个答案:

答案 0 :(得分:3)

有一种显而易见的O(n log n)方法,您可以收集元素,对列表进行排序并查找重复项。问题至少与在数组中查找重复项一样困难,请参阅this。因此,如果仅依靠比较,则无法实现比O(n log n)更好的效果。

答案 1 :(得分:1)

如果输入有限,例如,在值1到1000之间,则可以使用数组,我们称之为A
使用值val遍历每个节点并让A[val]=1 这样就可以标记出遇到的所有元素 这个版本在O(n)中运行,并使用其他1000个空格元素。