我正在编写一个程序,它接受一个给定的二叉树并尝试确定树是否平衡。
程序期望二叉树作为输入,例如:1,-1,-2,-3将表示为1作为根节点,而后续.getLeft()(或.getRight()如果是树的平衡方式不同!)命令会产生-1,-2,-3。
如果需要重复调用不同的节点对象,我怎样才能实现这种行为?是最好的做法是在moq中实现这一点,还是只使用简单的实现更好。
答案 0 :(得分:1)
使用普通实现。在这种情况下,我不建议你使用假货。创建假的努力将花费更多,然后只为您将测试的每个场景创建树。另一个危险是创建过度指定的测试,在任何变化时都会失败。
您的方法可能会实现如下:
public static bool isBalanced(Node root){
if(root==null){
return true;
}
else{
int lHight = root.left.height();
int rHight = root.right.height();
if(Math.Abs(lHight - rHight) > 1)
{
return false;
}
return isBalance(root.left) && isBalance(root.right);
}
}
你可以看到有一个递归。通常用假货测试递归方法很困难。在你的情况下,你可以测试方法行为没有任何假,所以我说这是正确的选择。
我建议您测试以下行为:
空树,根平衡,根不平衡(朝左,朝右),多层树:平衡,朝右,朝左
如果您要创建上述方案,您可能会涵盖所有情况,并且您的测试不会被过度指定......