public void duplicate()
{
int repeatation = 0;
Node current = root;
Node duplicate = root;
while (current == null)
{
if (duplicate == current || duplicate == current.right || duplicate== current.left)
{
Console.WriteLine("node is repeated :" + duplicate);
repeatation++;
}
}
Console.WriteLine("number of repeatation is :" + repeatation);
}
这段代码是针对二元搜索树中的重复元素以及元素重复多少次但它不能正常工作,你能不能告诉我这段代码有什么不对,我不确定我是否正确编码.... ..
答案 0 :(得分:7)
如果你遍历树InOrder,你会得到重复的元素,所以你只需要检查一个值何时等于前一个,以及它发生了多少次。
答案 1 :(得分:1)
这是一种可以帮助您解决此问题的方法:
1)获取BST中的最大值(向右,向右,......,直到你到达一片叶子)
2)遵循这个伪代码:
for i = 0 to MAX_VALUE do
currentNode = root;
while(TRUE)
if (currentNode.Value == i)
apprearanceCount++;
if (i > currentNode.Value)
currentNode = currentNode.RightNode;
else
currentNode = currentNode.LeftNode;
if currentNode == NULL then break; // Don't forget to save appearance count
答案 2 :(得分:0)
一旦保存哈希映射中的每个元素,你就可以遍历你的BST,以及你遇到该元素的次数的计数器。
之后,迭代哈希映射并输出计数器大于1的每个元素。
时间复杂度:O(n)