我正在准备面试,所以作为练习,我已经实现了算法来检查二叉树是否是 BST。
public static bool CheckBST(this Node root)
{
if (root == null) throw new ArgumentException("root");
Node previous = null;
foreach (var node in GetNodes(root))
{
if (previous != null && node.value <= previous.value)
{
return false;
}
previous = node;
}
return true;
}
private static IEnumerable<Node> GetNodes(Node root)
{
if (root.left != null)
{
foreach (var node in GetNodes(root.left))
{
yield return node;
}
}
yield return root;
if (root.right != null)
{
foreach (var node in GetNodes(root.right))
{
yield return node;
}
}
}
可以摆脱 foreach 循环(仍然使用递归和产量)?