3.2.31 #
解答 #
本题在原书后续印刷中已删除,这里仍然采用中文版的题目。
注意这个题并没有递归的要求,直接广度优先搜索即可,随时记录和检查已找到的键。
代码 #
protected static bool HasNoDuplicates(Node x)
{
var keys = new List<TKey>(); // 也可以用 HashSet 之类的数据结构提高效率。
var queue = new Queue<Node>();
queue.Enqueue(x);
while (queue.Count > 0)
{
var node = queue.Dequeue();
if (node == null)
{
continue;
}
if (keys.Contains(node.Key))
{
return false;
}
keys.Add(node.Key);
queue.Enqueue(node.Left);
queue.Enqueue(node.Right);
}
return true;
}