模拟树数据结构
Mocking a tree data structure
我正在编写一个程序,它采用给定的二叉树并尝试确定树是否平衡。
程序需要一个二叉树作为输入,例如:1,-1,-2,-3 将用 1 作为根节点和 subsequent.getLeft()(或 .getRight () 如果树的平衡方式不同!)命令将产生 -1、-2、-3。
如果需要重复调用不同的节点对象,我该如何实现这种行为?最好的做法是在最小起订量中实现这一点,还是只使用简单的实现会更好。
使用简单的实现。在这种情况下,我不建议您使用 fake。创建假的工作将花费更多,然后为您将测试的每个场景创建树。另一个危险是创建过度指定的测试,该测试将在任何更改时失败。
您的方法可能会实现如下:
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);
}
}
如您所见,有一个递归。通常很难用假货测试递归方法。在您的情况下,您可以在没有任何假的情况下测试方法行为,所以我认为这是正确的选择。
我建议您测试以下行为:
空树,根平衡,根不平衡(向左,向右),多层树:平衡,向右,向左
如果您将创建上述场景,您可能会涵盖所有情况,并且您的测试不会被过度指定...
我正在编写一个程序,它采用给定的二叉树并尝试确定树是否平衡。
程序需要一个二叉树作为输入,例如:1,-1,-2,-3 将用 1 作为根节点和 subsequent.getLeft()(或 .getRight () 如果树的平衡方式不同!)命令将产生 -1、-2、-3。
如果需要重复调用不同的节点对象,我该如何实现这种行为?最好的做法是在最小起订量中实现这一点,还是只使用简单的实现会更好。
使用简单的实现。在这种情况下,我不建议您使用 fake。创建假的工作将花费更多,然后为您将测试的每个场景创建树。另一个危险是创建过度指定的测试,该测试将在任何更改时失败。
您的方法可能会实现如下:
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);
}
}
如您所见,有一个递归。通常很难用假货测试递归方法。在您的情况下,您可以在没有任何假的情况下测试方法行为,所以我认为这是正确的选择。
我建议您测试以下行为:
空树,根平衡,根不平衡(向左,向右),多层树:平衡,向右,向左
如果您将创建上述场景,您可能会涵盖所有情况,并且您的测试不会被过度指定...